ホームページ > バックエンド開発 > Python チュートリアル > Python リストから項目を繰り返し削除すると予期しない結果が生じるのはなぜですか?

Python リストから項目を繰り返し削除すると予期しない結果が生じるのはなぜですか?

Patricia Arquette
リリース: 2024-12-23 06:01:13
オリジナル
259 人が閲覧しました

Why Does Iteratively Removing Items from a Python List Produce Unexpected Results?

Python で項目を反復的に削除するときの奇妙な動作

Python では、反復中にリストから項目を削除すると、奇妙な結果が発生することがあります。次のコードを考えてみましょう:

numbers = list(range(1, 50))

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

print(numbers)
ログイン後にコピー

期待される出力: [20, 21, ..., 49]

実際の出力: [2, 4, 6, 8, 10, 12, 14、16、18、20、21、...、 49]

理由:

この問題は、リストを反復処理する際にリストを変更することに起因します。最初のループ反復中に、1 が削除されます。ただし、後続の反復では短縮リストの 2 を指すのではなく、代わりに 3 を指します。これは、20 を超える要素のみが残るまで続きます。

解決策:

  • リスト理解:
numbers = [n for n in numbers if n >= 20]
ログイン後にコピー
  • その場変更:
numbers[:] = (n for n in numbers if n >= 20)
ログイン後にコピー
  • 事前ジェネレーターによる処理式:
for i, n in enumerate(numbers):
    if n < 20:
        print("do something")
        numbers[i] = None
numbers = [n for n in numbers if n is not None]
ログイン後にコピー

反復中にリストの長さを変更することは一般的に推奨されないことに注意することが重要です。提供されるソリューションは、望ましい結果を達成するための代替アプローチを提供します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート