2009-08-27 8 views
67

Tengo una lista en Python, y quiero verificar si algún elemento es negativo. Specman tiene el método has() de listas que sabe hacer:Manera pitónica de verificar si una condición se cumple para cualquier elemento de una lista

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

Dónde it es una palabra clave Specman asignada a cada elemento de la lista a su vez.

Encuentro esto bastante elegante. Miré a través del Python documentation y no pude encontrar nada similar. Lo mejor que se me ocurrió fue:

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

Me parece bastante poco elegante. ¿Hay una mejor manera de hacer esto en Python?

Respuesta

118

any():

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

Además, si usted va a utilizar "True en ...", lo convierten en una expresión generador, así que no hace falta ser O (n) de memoria:

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

Use any().

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

Python ha construido en función de any() precisamente para este propósito.

+0

2.5+ solamente. De lo contrario, tiene que hacer una función, tal vez usando ifilter y excepciones, o bool (set ((x para x si es cond))) o similar. –

+1

En lugar de una cosa complicada de ifilter, simplemente haz: def any (it): for el in it: if el: return True; falso retorno – Rory

Cuestiones relacionadas