「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ループを使用してリストから項目を削除するときの予期しない動作に対処する方法は?

ループを使用してリストから項目を削除するときの予期しない動作に対処する方法は?

2024 年 11 月 20 日に公開
ブラウズ:336

How to Handle Unexpected Behavior When Removing Items from Lists Using Loops?

リストから項目を削除するときの不正なループ

リストを反復処理してループ内の項目を削除すると、予期しない動作が発生する可能性があります。次のコードを考えてみましょう:

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 つのオプションがあります:

  1. リスト全体を削除します:
del letters[:]
  1. リストを空のリストに置き換えますリスト:
letters[:] = []
  1. 新しいリストを作成:
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 のリストから項目を正確かつ効率的に削除できます。

リリースステートメント この記事は、侵害がある場合は1729301716に複製されています。勉強[email protected]に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3