私はpythonパズルを見つけましたが、なぜそれが動作するかを知ることができません。反復中にリストを変更する
x = ['a','b','c']
for m in x:
x.remove(m)
このループの後に、x = ['b']
。 しかし、なぜですか?
私が理解する限り、for
キーワードは暗黙的にこのリストのイテレータを作成します。 .remove()
は__next__()
メソッドなのでb
はスキップされますか?私はそれについて言及することはできませんが、これは私の最高の推測です。
ので、要素を削除するとポインタは更新されません。最後のインデックスは、反復によって保持されます。要素を変更すると、シフトされます。 –
これは文書化された動作ではなく、実装固有のものです。避ける。ここで議論されています:https://unspecified.wordpress.com/2009/02/12/thou-shalt-not-modify-a-list-during-iteration/ – cdarke
イテレータはおそらく 'i = 0一方、i