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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 07:07:09547ブラウズ

Why Does Removing List Elements During Iteration in Python Lead to Unexpected Results?

予期しない動作: 反復中にリストから要素を削除する

リストを反復処理して、特定の基準を満たす特定の要素を削除しようとすると、反復プロセス中にリストが変更されると、予期しない動作が発生する可能性があります。次の Python コードを考えてみましょう:

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)

驚くべきことに、得られた結果は次のとおりです:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]

20 未満の数値は削除されると予想されますが、結果には残ります。これは、リストが反復処理中に変更されるためです。最初の要素 1 が削除されると、後続の要素の位置が移動し、変更されたリスト内の次の要素にループが続行されますが、これは予期したものではありません。

この問題を正確に解決するにはリストを反復処理する場合は、リスト内包表記またはインプレース変更を使用できます。リスト内包表記を使用すると、指定した条件を満たす要素のみを含む新しいリストを作成できます:

numbers = [n for n in numbers if n >= 20]

または、スライス割り当てを使用してインプレース変更を実行できます:

numbers[:] = (n for n in numbers if n >= 20)

この方法でリストを変更すると、反復は影響を受けず、望ましい結果が得られます。

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

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