2013-07-24 11 views
13
>>> l = list(range(10)) 
>>> l 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> if filter(lambda x: x > 10, l): 
...  print "foo" 
... else:      # the list will be empty, so bar will be printed 
...  print "bar" 
... 
bar 

मैं इसके बजाय any() का उपयोग करना चाहता हूं, लेकिन any() केवल एक तर्क लेता है: पुन: प्रयोज्य। क्या कोई बेहतर तरीका है?कस्टम भविष्यवाणी के साथ पाइथन के किसी भी() को कैसे प्राप्त करें?

उत्तर

23

उपयोग है कि एक तर्क के रूप में एक generator expression:

any(x > 10 for x in l) 

यहाँ विधेय जनरेटर अभिव्यक्ति की अभिव्यक्ति पक्ष में है, लेकिन आप कार्यों का उपयोग कर सहित वहाँ किसी भी अभिव्यक्ति का उपयोग कर सकते हैं।

डेमो:

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

जनरेटर अभिव्यक्ति तक से अधिक दोहराया किया जाएगा any() एक True परिणाम पाता है, और आगे नहीं:

>>> 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

any() के अंदर एक जनरेटर अभिव्यक्ति का उपयोग करें:

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

यह मानता है कि आपके पास पहले से ही कुछ अनुमानित फ़ंक्शन है जिसका आप उपयोग करना चाहते हैं, बेशक यदि यह कुछ आसान है तो आप सीधे बूलियन अभिव्यक्ति का उपयोग कर सकते हैं: any(i > 10 for i in l)

संबंधित मुद्दे

 संबंधित मुद्दे