リストから項目を削除するときの不正なループ
リストを反復処理してループ内の項目を削除すると、予期しない動作が発生する可能性があります。次のコードを考えてみましょう:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
print(letters)
このコードでは、期待どおりすべての項目を削除するのではなく、次の出力が生成されます:
['b', 'd', 'f', 'h', 'j', 'l']
この一見奇妙な動作は、Python のドキュメントで説明されています。
[I]シーケンスがループ内で反復されます。反復処理中のリストを変更する必要がある場合は、コピーを反復処理する必要があります。
この特定のケースでは、項目を削除した後に反復変数 i が更新され、その結果、次の項目のインデックスが更新されます。スキップされるループ。
正確なアイテム削除のための書き換え
この動作を修正するには、コピーを反復処理する必要があります。リストの項目を削除するか、別の方法を使用して項目を削除します。ここに 3 つのオプションがあります:
del letters[:]
letters[:] = []
letters = []
または、次の条件に基づいて特定のアイテムを削除する必要がある場合は、条件を満たしている場合は、内包表記または filter() 関数を使用してリストをフィルタリングできます。
letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]
letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))
これらのガイドラインに従うことで、Python のリストから項目を正確かつ効率的に削除できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3