ホームページ >バックエンド開発 >Python チュートリアル >Python で反復処理やリストからの削除を行うと予期しない結果が生じる理由
反復中にリストから項目を削除する - 典型的なイディオムが失敗する理由
プログラミングでは、リストを反復処理して削除するのが一般的です。必要に応じて項目を選択します。ただし、Python に関しては、予期しない結果を引き起こす可能性があるこのイディオムには注意点があります。
次の Python コードを考えてみましょう。
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i) print(letters)</code>
このコードは、リスト。驚くべきことに、コードの出力は空のリストではなく、元のリストの他のすべての項目が含まれています。
['b', 'd', 'f', 'h', 'j', 'l']
説明
この理由動作は、反復中のリスト変更の Python の処理にあります。ドキュメントには明確に次のように記載されています:
「ループ内で反復されているシーケンスを変更するのは安全ではありません [...] 反復しているリストを変更する必要がある場合は [...] 反復する必要があります"
提供されたコードでは、反復処理中にリストの文字を変更しようとしています。この状況を処理するための Python の設計では、削除するたびに 1 つおきの項目をスキップして反復が続行されます。
コードの書き換え
この問題を回避するには、コードを次のようにする必要があります。リストを反復処理する前にリストのコピーを作成するように書き換えられました。これを実現するには、いくつかの方法があります。
あるいは、条件に基づいて特定の項目を削除することが目的の場合は、filter() 関数を使用して新しいリストを作成する方が効率的です。必要な項目のみを含むリスト。このアプローチにより、元のリストのコピーを反復処理する必要がなくなります。
以上がPython で反復処理やリストからの削除を行うと予期しない結果が生じる理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。