Manera pitónica de comprobar si una condición es válida para cualquier elemento de una lista

110

Tengo una lista en Python y quiero verificar si algún elemento es negativo. Specman tiene el has()método para listas que hace:

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

¿Dónde itse asigna una palabra clave de Specman a cada elemento de la lista a su vez?

Encuentro esto bastante elegante. Revisé la documentación de Python y no pude encontrar nada similar. Lo mejor que se me ocurrió fue:

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

Encuentro esto bastante poco elegante. ¿Existe una mejor manera de hacer esto en Python?

Nathan Fellman
fuente

Respuestas:

186

cualquiera () :

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

Además, si va a usar "True in ...", conviértalo en una expresión generadora para que no ocupe memoria O (n):

if True in (t < 0 for t in x):
Conocido
fuente
1
Corrección: si va a usar True in ..., reconsidere y use anyen su lugar.
Aran-Fey
29

Utilice any().

if any(t < 0 for t in x):
    # do something
Daniel Pryden
fuente
10

Python tiene una función any () incorporada exactamente para este propósito.

Rory
fuente
2.5+ solamente. De lo contrario, debe crear una función, tal vez usando ifilter y excepciones, o bool (set ((x para x si cond))) o similar.
Gregg Lind
1
En lugar de una cosa complicada de ifilter, simplemente haga: def any (it): for el in it: if el: return True; return False
Rory