l = [1,2,3,4] * 10
for idx, n in enumerate(l):
if n == 3: del l[idx]
これは機能し、を与え[1, 2, 4, 1, 2, 4, 1, 2, 4 ...]
ます。どうして?最初の削除ですべてのインデックスが削除されるべきではありませんか?Pythonはその動作をDWIMスタイルでサイレントに変更していますか?
実際には、すべての要素を反復処理しているわけではありません。コードがその事実を見逃しているだけです。
何も出力しない次の方法でそれを示すことができます。
l = [1,2,3,4] * 10
for idx, n in enumerate(l):
if n == 3: del l[idx]
elif n == 4: print('saw 4')
関連する質問に対する私の回答に興味があるかもしれません。forループ中にリストエントリを変更する方法は?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加