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

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

DDD
リリース: 2024-12-24 16:14:18
オリジナル
805 人が閲覧しました

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

反復中にリストを変更することの危険性を理解する

リストを変更しながらリストを走査すると、リスト間の不一致により予期しない動作が発生する可能性があります。リストの状態とそれに対する反復子の理解。これを説明するために、次の Python コードを考えてみましょう:

l = range(100)
for i in l:
    print(i)
    print(l.pop(0))
    print(l.pop(0))
ログイン後にコピー

このコードは、連続した数値の予想される出力の代わりに、独特の結果を生成します。その理由は、反復子がリスト l を反復処理する間に、リスト自体が変更されるという事実にあります。具体的には、pop(0) メソッドは l.

の先頭から要素を削除します。このような不一致を防ぐには、反復処理されるコンテナーの変更を避けることが重要です。一般的な解決策の 1 つは、コンテナーのコピーを作成し、そのコピーを反復処理することです。ただし、このような場合、目的が元のコンテナを変更することである場合は、別のアプローチが必要です。

次の代替コードを検討してください。

i = 0
while i < len(some_list):
    print(some_list[i])
    print(some_list.pop(0))
    print(some_list.pop(0))
    i += 1
ログイン後にコピー

このコードでは、次のコードを使用します。繰り返しを手動で制御する while ループ。リストを直接反復処理する代わりに、インデックス i を使用して要素にアクセスし、some_list から項目を手動でポップします。これにより、ループが some_list.

への更新に確実に応答するようになります。

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

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