Python で項目を反復的に削除するときの奇妙な動作
Python では、反復中にリストから項目を削除すると、奇妙な結果が発生することがあります。次のコードを考えてみましょう:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
期待される出力: [20, 21, ..., 49]
実際の出力: [2, 4, 6, 8, 10, 12, 14、16、18、20、21、...、 49]
理由:
この問題は、リストを反復処理する際にリストを変更することに起因します。最初のループ反復中に、1 が削除されます。ただし、後続の反復では短縮リストの 2 を指すのではなく、代わりに 3 を指します。これは、20 を超える要素のみが残るまで続きます。
解決策:
numbers = [n for n in numbers if n >= 20]
numbers[:] = (n for n in numbers if n >= 20)
for i, n in enumerate(numbers): if n < 20: print("do something") numbers[i] = None numbers = [n for n in numbers if n is not None]
反復中にリストの長さを変更することは一般的に推奨されないことに注意することが重要です。提供されるソリューションは、望ましい結果を達成するための代替アプローチを提供します。
以上がPython リストから項目を繰り返し削除すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。