itertools.filterfalse() și compress() în Python

Modulul itertools Python 3.0+ (compress: 3.1+)

filterfalse păstrează elementele pentru care condiția este falsă; compress filtrează după o listă de valori adevărat/fals.

Sintaxă
itertools.filterfalse(functie, iterabil)
itertools.compress(date, selectori)

Ce face itertools.filterfalse() și compress()

filterfalse(f, colectie) este opusul lui filter(): produce elementele pentru care f(x) este fals. Cu None ca funcție, produce elementele false.

compress(date, selectori) păstrează elementele din date pentru care elementul de pe aceeași poziție din selectori este adevărat. Este util când ai deja o „mască” de valori logice.

Parametri

Parametru Descriere
functie, iterabil Pentru filterfalse: testul și elementele.
date, selectori Pentru compress: elementele și valorile logice corespunzătoare.

Ce returnează

Un iterator.

Exemple

Exemplul 1: Respinși și selecție după mască

from itertools import filterfalse, compress
note = [9, 4, 7, 3, 10]
print(list(filterfalse(lambda n: n >= 5, note)))
nume = ["Ana", "Dan", "Ioana", "Mihai"]
prezenti = [True, False, True, True]
print(list(compress(nume, prezenti)))
print(list(filterfalse(None, [0, 1, "", "a", None])))

Rezultat

[4, 3]
['Ana', 'Ioana', 'Mihai']
[0, '', None]

Greșeli frecvente

  • Dai selectori mai puțini decât datele la compress: elementele în plus sunt ignorate fără avertisment.

Comenzi înrudite

  • filter(): Păstrează doar elementele pentru care o funcție returnează o valoare adevărată.
  • itertools.takewhile() și dropwhile(): takewhile ia elementele cât timp o condiție este adevărată; dropwhile le sare cât timp este adevărată.
  • List comprehension: Construiește o listă nouă dintr-o altă colecție, într-un singur rând.