反復変更中に Python リストで予期しない要素がスキップされる
Python で、for ループは、要素の欠落など、予期しない動作を引き起こす可能性があります。次の例を考えてみましょう:
<code class="python">x = [1,2,2,2,2]
for i in x:
x.remove(i)
print(x)</code>
ログイン後にコピー
期待される結果は空のリストですが、実際の出力は [2, 2] です。この動作を理解するには、Python が反復中に基になるリストを変更しないことを理解することが重要です。代わりに、リストの「コピー」を操作します。
x.remove(i) が呼び出されると、元の x リストが変更されますが、ループは x の変更されていない「コピー」を反復処理し続けます。 。したがって、後続の反復で元の x リストの変更された要素が検出されると、それらは「コピー」には存在しなくなり、スキップされます。
この問題に対処するには、次のコードを利用します。
<code class="python">for i in x[:]:
x.remove(i)</code>
ログイン後にコピー
スライス演算子 [:] は x のコピーを生成するため、元の x リストに変更が適用される間、ループはこのコピーを反復処理します。これにより、すべての要素が意図したとおりに削除されます。
Python によるこれらの操作の処理方法によって予期しない動作が発生する可能性があるため、反復中にリストを変更するときは常に注意してください。
以上が反復変更中に Python リストで予期しない要素のスキップを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。