2012-08-09 11 views
5

Digamos que tiene una secuencia iterable de thing objetos llamados things. Cada thing tiene un método is_whatever() que devuelve True si cumple con el criterio "cualquiera". Quiero averiguar de manera eficiente si algún elemento en things es lo que sea.¿Es esta una manera eficiente y pitónica de ver si algún elemento en un iterable es verdadero para cierto atributo?

Esto es lo que estoy haciendo ahora:

any_item_is_whatever = True in (item.is_whatever() for item in items) 

¿Eso es una manera eficiente de hacerlo, es decir, Python dejará de generar elementos de la iterables tan pronto como se encuentra el primer resultado verdadero? Estilísticamente, ¿es pitónico?

Respuesta

12

Se debe utilizar la función incorporada any():

any_item_is_whatever = any(item.is_whatever() for item in items) 
+0

Gracias. Me siento aliviado. 'True in' es feo. – Ghopper21

+0

Pensé que era bastante ingenioso ... –

+0

@NoctisSkytower: Incluso provoca cortocircuitos cuando se usa con una expresión de generador, por lo que en realidad es bastante bueno. Usar la forma idiomática es tanto más fácil de leer como más rápido. –

Cuestiones relacionadas