ホームページ >バックエンド開発 >Python チュートリアル >Python で反復中にリストを変更すると予期しない動作が起こるのはなぜですか?

Python で反復中にリストを変更すると予期しない動作が起こるのはなぜですか?

DDD
DDDオリジナル
2024-12-12 22:17:13148ブラウズ

Why Does Modifying a List During Iteration in Python Lead to Unexpected Behavior?

反復中のリスト変更の影響

Python でリストを操作する場合、反復中のリストの変更に注意することが重要です。元のリストをトラバース中に元のリストを操作しようとすると、予期しない結果が生じる可能性があります。

次のコード サンプルを考えてみましょう。

l = range(100)
for i in l:
    print(i)
    print(l.pop(0))
    print(l.pop(0))

このコードでは、リスト内のすべての要素を出力し、その後、最初の 2 つの要素を削除し、残りの要素に対してこのプロセスを繰り返します。ただし、実際の出力はこの期待とは異なります。

この異常の理由は、反復中のリストの変更にあります。 l.pop(0) を使用してリストから要素を削除すると、リストのサイズと順序が変更されます。その結果、反復子 i が古くなり、ループの動作が不安定になります。

反復中のリスト変更の回避

このような問題を防ぐには、リストのコピーを作成し、そのコピーを反復処理します。これにより、元のリストが変更されないことが保証され、反復子によってループ全体で要素に正確にアクセスできます。

たとえば、次のコードはこのアプローチを示しています。

l_copy = list(l)  # Create a copy of l
for i in l_copy:
    print(i)
    print(l.pop(0))
    print(l.pop(0))

次に、出力元のリスト l は整合性を保持し、変更されたコピー l_copy はiteration.

または、提供された回答で示唆されているように、インデックスを使用して while ループを使用して反復を制御し、ループ内の元のリストに必要な変更を加えることができます。

以上がPython で反復中にリストを変更すると予期しない動作が起こるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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