Pythonのリストは非常に便利ですが、リストのアイテムをイテレーションしながら削除することは、注意が必要な操作です。リストの要素を削除すると、インデックスが変わるため、ループが期待通りに動作しないことがあります。本記事では、Python 3でリストからアイテムをイテレーションしながら削除する方法をいくつかのサンプルコードと共に解説します。
1. 逆順でのイテレーション
最も簡単な方法は、リストを逆順でイテレーションすることです。これにより、削除するアイテムの後ろにあるインデックスが変わることを心配する必要がありません。
items = [1, 2, 3, 4, 5] for i in range(len(items) - 1, -1, -1): if items[i] % 2 == 0: # 偶数を削除 del items[i] print(items) # 出力: [1, 3, 5]
2. リスト内包表記を使用する
リスト内包表記を使用して、新しいリストを作成し、条件に合わないアイテムを除外する方法もあります。この方法は、元のリストを変更せずに新しいリストを作成するため、安全です。
items = [1, 2, 3, 4, 5] items = [item for item in items if item % 2 != 0] # 奇数を残す print(items) # 出力: [1, 3, 5]
3. filter()関数を使用する
Pythonの組み込み関数であるfilter()を使用することもできます。filter()は、指定した条件を満たす要素だけを残す新しいイテラブルを生成します。
items = [1, 2, 3, 4, 5] items = list(filter(lambda x: x % 2 != 0, items)) # 奇数を残す print(items) # 出力: [1, 3, 5]
まとめ
リストからアイテムをイテレーションしながら削除することは、適切な方法を選べば安全に行えます。逆順でのイテレーション、リスト内包表記、filter()関数の3つの方法を紹介しましたが、どの方法も特定の状況に応じて使い分けることが重要です。これらのテクニックを活用して、Pythonでのリスト操作をより効率的に行いましょう。