反復処理中にリストから項目を削除するにはどうすればいいですか? 質問する

反復処理中にリストから項目を削除するにはどうすればいいですか? 質問する

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

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

の代わりに何を使用すればよいですかcode_to_remove_tup? この方法でアイテムを削除する方法がわかりません。

ベストアンサー1

あなたはリストの理解削除したくない要素のみを含む新しいリストを作成するには:

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)

おすすめ記事