ホームページ  >  記事  >  バックエンド開発  >  反復変更中に Python リストで予期しない要素のスキップを回避するにはどうすればよいですか?

反復変更中に Python リストで予期しない要素のスキップを回避するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-21 09:07:02875ブラウズ

How to Avoid Unexpected Element Skipping in Python Lists During Iteration Modification?

反復変更中に 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。