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é.