2011-12-27 23 views
15

Qual è il modo idiomatico di Python per verificare se tutti gli elementi di una raccolta soddisfano una condizione? (Il .NET All() method riempie questa nicchia bene in C#.)Equivalente Python di LINQ Tutte le funzioni?

C'è il metodo ciclo ovvia:

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

E una lista di comprensione potrebbe fare il trucco, ma sembra uno spreco:

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

Ci deve essere qualcosa di più elegante ... Cosa mi manca?

+0

Vedi anche http://stackoverflow.com/questions/8641008/compare-multiple-variables-to-the-same-value-in-if-in-python –

risposta

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

Questo cortocircuito e non richiede che le cose siano un elenco, qualsiasi cosa iterabile funzioni, quindi ha molte funzioni interessanti.

C'è anche il analoga

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

hah! Così ovvio! Bel lutto, mi sento sciocco ora ... – Cameron

+0

Sicuramente il modo in cui potrei andare. Comunque, 'all' in Python differisce da' Enumerable.All' in quanto non prende direttamente un predicato. (Quindi è più simile a Enumerable.Where (predicato). All() '.) –

Problemi correlati