2011-12-27 23 views
15

¿Cuál es la forma idiomática de Python para probar si todos los elementos de una colección satisfacen una condición? (El .NET All() method llena este nicho muy bien en C#.)Python equivalente a la función LINQ All?

Hay el método de bucle obvia:

all_match = True 
for x in stuff: 
    if not test(x): 
     all_match = False 
     break 

y una lista de comprensión podría hacer el truco, pero parece un desperdicio:

all_match = len([ False for x in stuff if not test(x) ]) > 0 

Allí tiene para ser algo más elegante ... ¿Qué me estoy perdiendo?

+0

Véase también http://stackoverflow.com/questions/8641008/compare-multiple-variables-to-the-same-value-in-if-in-python –

Respuesta

25
all_match = all(test(x) for x in stuff) 

Este cortocircuitos y no requiere cosas para ser una lista - nada iterables trabajará - por lo que tiene varias características interesantes.

También está el análogo

any_match = any(test(x) for x in stuff) 
+2

Hah! ¡Tan obvio! Buena pena me siento tonto ahora ... – Cameron

+0

Definitivamente la forma en que iría. Sin embargo, 'all' en Python difiere de' Enumerable.All' en que no toma directamente un predicado. (Así que es más parecido a 'Enumerable.Where (predicate) .All()'.) –

Cuestiones relacionadas