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

Python での反復中にリストを変更すると予期しない結果が生じるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 10:38:39786ブラウズ

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

反復中にリストを変更する

Python でリストを操作する場合、ループ中にリストを変更した結果を理解することが不可欠です。次のコードを考えてみましょう:

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

予期せぬことに、このコードは間違った出力を生成します。なぜこのようなことが起こるのでしょうか?

Python でリストをループするとき、反復子は現在の位置を記憶し、それを使用して要素を反復処理します。ただし、反復中にリストが変更された場合、反復子のメモリは更新されません。その結果、ループによって要素がスキップまたは重複する可能性があります。

上記の例では、l.pop(0) はリストから最初の要素を削除します。したがって、ループは 2 番目の要素まで継続しますが、反復子は最初の要素を覚えています。これにより、ループで最初の要素が 2 回出力されます。

この問題を回避するには、反復中にリストを決して変更しないことが重要です。代わりに、一時変数またはリストのコピーを変更に使用できます。

あるいは、次の例のように、インデックス変数を指定した while ループの使用を検討できます。

i = 0
while i < len(l):
    print(l[i])
    i += 1

このメソッドにより、プロセス中に要素が削除された場合でも、ループがリスト内で正しく反復されることが保証されます。

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

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