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?

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):

1
Corrección: si va a usar True in ..., reconsidere y use anyen su lugar.
Aran-Fey


10

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.