反復中にリストを変更することの危険性を理解する
リストを変更しながらリストを走査すると、リスト間の不一致により予期しない動作が発生する可能性があります。リストの状態とそれに対する反復子の理解。これを説明するために、次の 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 サイトの他の関連記事を参照してください。