Как выполнить замену на месте всех вхождений элемента в список в python?
Предположим, у меня есть список:
myl = [1, 2, 3, 4, 5, 4, 4, 4, 6]
Каков наиболее эффективный и простой питонический способ на месте (двойной акцент) замены всех вхождений 4
на 44
?
Мне также любопытно, почему не существует standard
способа сделать это (особенно, когда strings
имеет не-на месте replace
)?
Ответы
Ответ 1
Мы можем выполнить итерацию по списку с помощью enumerate
и заменить старое значение на новое значение, например
myl = [1, 2, 3, 4, 5, 4, 4, 4, 6]
for idx, item in enumerate(myl):
if item == 4:
myl[idx] = 44
print myl
# [1, 2, 3, 44, 5, 44, 44, 44, 6]
Ответ 2
myl[:] = [x if x != 4 else 44 for x in myl]
Выполните замену не на месте с пониманием списка, затем slice-присвойте новые значения в исходный список, если вы действительно хотите изменить оригинал.
Ответ 3
for item in myl:
if item ==4:
myl[myl.index(item)]=44
Ответ 4
while True:
try:
myl[ myl.index(4) ] = 44
except:
break
Подход try-except
, хотя более pythonic менее эффективен. Эта программа timeit на ideone сравнивает как минимум два из представленных здесь ответов.