← retour aux snippets

itertools.filterfalse et compress: filtrage efficace

Filtrer par prédicat inverse ou selon un masque booléen.

objectif

Filtrer par prédicat inverse ou selon un masque booléen.

code minimal

from itertools import filterfalse, compress
nums = [0,1,2,3,4]
evens = list(filterfalse(lambda x: x % 2 == 1, nums))
masked = list(compress(nums, [0,1,0,1,0]))
print(evens == [0,2,4] and masked == [1,3])  # attendu: True

utilisation

from itertools import compress
letters = list("abcde")
mask = [True, False, True, False, False]
print("".join(compress(letters, mask)) == "ac")

variante(s) utile(s)

from itertools import filterfalse
print(list(filterfalse(bool, [0, "", None, "x"])) == [0, "", None])

notes

  • filterfalse garde les éléments pour lesquels le prédicat est faux.
  • compress filtre selon un iterable de booléens aligné.