リストを反復処理しながらリストから削除する
リストを反復処理して要素を削除する場合、Python の動作は不可解になる場合があります。以下のコード スニペット:
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
予想される [0, 2, 4, 6, 8] ではなく、[0, 2, 3, 5, 6, 8, 9] を出力します。
反復的な削除について理解するBehavior
この出力は、Python が反復中に可変シーケンスを処理する方法から生じます。 Remove が呼び出されると、基になるリストが変更されます。ただし、反復子は同じままで、変更されたリストの走査を続けます。
以下の図は、削除プロセスを示しています。
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 0; remove? no ^ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 1; remove? yes ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 3; remove? no ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] <- b = 4; remove? yes ^ [0, 2, 3, 5, 6, 7, 8, 9] <- b = 6; remove? no ^ [0, 2, 3, 5, 6, 7, 8, 9] <- b = 7; remove? yes ^ [0, 2, 3, 5, 6, 8, 9] <- b = 9; remove? no ^
残りの質問への対処
以上が反復中に Python リストから要素を削除すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。