ここには簡単な質問があります。私の仕事は、リストをループし、それが持つ各要素を印刷することです。各印刷の後、私は同様にリストからこの要素を削除するつもりです。私のコードは次のとおりです。Python:リストをループしながらリスト内の要素を削除する
>> a = [1,2]
>> for x in a:
>> print x
>> a.remove(x)
>> print a
出力は次のとおりです。
>> 1
>> [2]
しかし、奇妙な何かがここに起こる:のみ1が印刷されたリストから1を削除した後にそれはそう 、プログラムはの飛び出し直接ループします。私の前提はリストの内容を変更した後ですが、イテレータも影響を受けるかもしれませんが、私はあまりよく分かりません。より安全な方法は次のとおりです。
>> a = [1,2]
>> b = list(a)
>> for x in b:
>> print x
>> a.remove(x)
>> print a
もっと詳しい説明はありますか?
イテレータは位置を追跡します(yes)。しかし、なぜあなたはそれぞれの要素を取り除くことに気をつけますか?あなたは空のリストで終わるでしょう。 – jonatan
'b = list(a)'はリストのコピーを作成するので、 'a'と' b'は異なるオブジェクトになります。 [this](https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/)が便利かもしれません。 – roganjosh
[この回答](https://stackoverflow.com/a/34238688/8747)はちゃんと説明しています。 –