リストの反復: Python の動作を理解する
Python では、リストを反復し、その内容を同時に変更すると、予期しない動作が発生する可能性があります。次の単純化された例を考えてみましょう:
<code class="python">x = [1,2,2,2,2] for i in x: x.remove(i) print(x) </code>
リストからすべての要素を削除することが目的です。ただし、実行すると 2 つの要素が残ります。なぜこのようなことが起こるのでしょうか?
反復中の変更の落とし穴
Python では、反復中にリストを変更することは推奨されないと規定しています。リストから要素が削除されると、イテレータの位置は次の要素に移動します。この例では、最初の要素が削除され、位置が 2 番目の要素に移動されます。ただし、2 番目の要素はまだ「2」であるため、反復中にスキップされます。このスキップは継続し、2 つの「2」要素が残ります。
問題の解決
これに対処するために、Python では反復処理の前にリストを効果的にコピーする手法が提供されています。
<code class="python">for i in x[:]: x.remove(i)</code>
この場合、[:] スライス演算子は元のリストのコピーを作成します。これにより、反復が期待どおりに進行し、すべての要素が元のリストから削除されることが保証されます。この動作は、要素の追加や置換ではなく、反復中のリストの変更に適用されることに注意してください。
以上がPython での反復中のリストの変更に問題があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。