2013-07-24 10 views

risposta

23

Utilizzare un generator expression come quello un argomento:

any(x > 10 for x in l) 

Ecco il predicato si trova nella parte espressione del generatore di espressione, ma è possibile utilizzare qualsiasi espressione lì, compreso l'uso di funzioni.

Dimostrazione:

>>> l = range(10) 
>>> any(x > 10 for x in l) 
False 
>>> l = range(20) 
>>> any(x > 10 for x in l) 
True 

L'espressione generatore viene iterato finoany() trova un risultato True, e nessuna ulteriore:

>>> from itertools import count 
>>> endless_counter = count() 
>>> any(x > 10 for x in endless_counter) 
True 
>>> # endless_counter last yielded 11, the first value over 10: 
... 
>>> next(endless_counter) 
12 
6

usare un'espressione generatore interno any():

pred = lambda x: x > 10 
if any(pred(i) for i in l): 
    print "foo" 
else: 
    print "bar" 

Si presume che si abbia già una funzione di predicato che si desidera utilizzare, ovviamente se si tratta di qualcosa di semplice come questo, è possibile utilizzare direttamente l'espressione booleana: any(i > 10 for i in l).

Problemi correlati