1. ホーム
  2. python

[解決済み] 反復処理中にリストから項目を削除するには?

2022-03-17 09:59:57

質問

Pythonでタプルのリストを反復処理し、特定の条件を満たした場合にそれらを削除しようとしています。

for tup in somelist:
    if determine(tup):
         code_to_remove_tup

の代わりに何を使用すればよいですか? code_to_remove_tup ? このような形で項目を削除する方法がわかりません。

解決方法を教えてください。

リスト内包を使って、削除したくない要素だけを含む新しいリストを作成することができます。

somelist = [x for x in somelist if not determine(x)]

または、スライスに代入することで somelist[:] を使えば、既存のリストに手を加えて、必要な項目だけを含むようにすることができます。

somelist[:] = [x for x in somelist if not determine(x)]

への参照が他にある場合、この方法は有用です。 somelist を使用すると、変更を反映させる必要があります。

また、内包の代わりに itertools . Python 2 では。

from itertools import ifilterfalse
somelist[:] = ifilterfalse(determine, somelist)

あるいはPython 3で。

from itertools import filterfalse
somelist[:] = filterfalse(determine, somelist)