ホームページ >バックエンド開発 >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 のドキュメントで説明されています。
[I] ループ内で反復されるシーケンスを変更するのは安全ではありません。反復処理中のリストを変更する必要がある場合は、コピーを反復処理する必要があります。
この特定のケースでは、項目を削除した後に反復変数 i が更新され、その結果、次の項目のインデックスが更新されます。スキップされるループ。
項目を正確に削除するための再書き込み
この動作を修正するには、リストのコピーを反復処理するか、別の方法を使用して項目を削除する必要があります。 。以下に 3 つのオプションがあります:
<code class="python">del letters[:]</code>
<code class="python">letters[:] = []</code>
<code class="python">letters = []</code>
または、特定のリストを削除する必要がある場合は、条件に基づいて項目を削除するには、内包表記または filter() 関数を使用してリストをフィルタリングできます。
<code class="python">letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]</code>
<code class="python">letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))</code>
これらのガイドラインに従うことで、Python でリストから項目を正確かつ効率的に削除できます。 .
以上がループを使用してリストから項目を削除するときの予期しない動作に対処する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。