Metodo pitonico per verificare se una condizione è valida per qualsiasi elemento di un elenco


111

Ho un elenco in Python e voglio controllare se alcuni elementi sono negativi. Specman ha il has()metodo per gli elenchi che fa:

x: list of uint;
if (x.has(it < 0)) {
    // do something
};

Dove si ittrova una parola chiave Specman mappata a turno a ciascun elemento dell'elenco.

Lo trovo piuttosto elegante. Ho esaminato la documentazione di Python e non sono riuscito a trovare nulla di simile. Il meglio che sono riuscito a trovare è stato:

if (True in [t < 0 for t in x]):
    # do something

Lo trovo piuttosto inelegante. C'è un modo migliore per farlo in Python?

Risposte:


187

qualsiasi () :

if any(t < 0 for t in x):
    # do something

Inoltre, se intendi utilizzare "True in ...", rendilo un'espressione generatrice in modo che non richieda memoria O (n):

if True in (t < 0 for t in x):

1
Correzione: se hai intenzione di utilizzare True in ..., riconsiderare e utilizzare anyinvece.
Aran-Fey


10

Python ha una funzione any () incorporata proprio per questo scopo.


Solo 2.5+. Altrimenti devi creare una funzione, magari usando ifilter ed exceptions, o bool (set ((x for x if cond))) o simili.
Gregg Lind

1
Piuttosto che una complicata cosa ifilter, basta fare: def any (it): for el in it: if el: return True; return False
Rory
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.