Python では、反復中にリストを変更すると、予期しない結果が生じる可能性があります。次のコードを考えてみましょう:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
意図したように 20 未満の数値を削除する代わりに、このコードは 20 未満の数値がすべて欠落しているリストと 20 自体を出力します。
この問題は、リストから項目を削除すると、後続の項目の位置が移動するという事実に起因します。ループが進行するにつれて、削除された要素によってリストに「穴」ができるため、チェックされる項目は予期したものではなくなります。
たとえば、最初の反復では 1 が削除されますが、次の反復では2 をチェックしません。リストが短縮されているため、代わりに 3 がチェックされます。この動作が継続し、不正確な出力が発生します。
この問題を回避するには、反復中にリストを変更する別の方法を使用します。
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: numbers[i] = None numbers = [n for n in numbers if n is not None]
これらの手法は、反復中にリストの長さを変更しません。 、アイテムの正しい処理と目的の出力が保証されます。
以上が反復中に Python リストを変更すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。