私がリストを持っていると仮定します:
myl = [1, 2, 3, 4, 5, 4, 4, 4, 6]
インプレース(二重強調)すべての置換の最も効率的で最も単純なPythonの方法は何ですか4
と44
の出現?
また、これを行うためのstandard
方法がない理由についても興味があります(特に、strings
にnot-in-placereplace
メソッド)?
このように、リストを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]
myl[:] = [x if x != 4 else 44 for x in myl]
リスト内包表記を使用してインプレースではない置換を実行してから、元のリストを本当に変更する場合は、新しい値を元のリストにスライス割り当てします。
while True:
try:
myl[myl.index(4)] = 44
except:
break
try-except
アプローチは、より多くのPythonicですが、効率が低くなります。この ideoneのtimeitプログラム ここで提供される回答の少なくとも2つを比較します。
for item in myl:
if item ==4:
myl[myl.index(item)]=44