2010-08-27 15 views
13
l=[None,None] 

कोई ऐसा फ़ंक्शन है जो जांचता है कि सूची एल में केवल कोई नहीं है या नहीं?कैसे जांचें कि सूची में केवल पाइथन

+0

क्या क्या यह खाली सूची '[] 'के लिए वापस आना चाहिए? – Constantin

+1

संभावित डुप्लिकेट [कैसे जांचें कि सूची में सभी आइटम कोई नहीं हैं?] (Http://stackoverflow.com/questions/6518394/how-to-check-if-all-items-in-the-list-are -नोन) –

+0

संभावित डुप्लिकेट [यह जांचने के लिए सबसे संक्षिप्त तरीका है कि कोई सूची खाली है या \ [कोई नहीं \]?] (http://stackoverflow.com/questions/1270920/most-concise-way-to-check-whether -a-list-is-blank-or-none) – ThiefMaster

उत्तर

24

तुम्हारा मतलब हैं, अगर सूची l केवल कोई नहीं होता है की जांच करने के

if all(x is None for x in l): 
    ... 
+0

"... केवल कोई नहीं है" या खाली है। – Constantin

+0

@ सिस्टम: क्यों नहीं? – kennytm

+0

@systempuntoout, यह वास्तव में जनरेटर अभिव्यक्ति है। – Constantin

8

any() आज़माएं - यह जांच करता है कि सूची में कोई तत्व है जो True को बुलियन संदर्भ में माना जाता है। None एक बूलियन संदर्भ में False का मूल्यांकन करता है, इसलिए any(l)False बन जाता है।

ध्यान दें कि, यह जांचने के लिए कि कोई सूची (और इसकी सामग्री नहीं) वास्तव में None है, if l is None का उपयोग किया जाना चाहिए। और if not l यह जांचने के लिए कि क्या यह या तो कोई नहीं है (या कुछ और जिसे False माना जाता है) या खाली है।

+0

>>> कोई भी ([कोई नहीं, कोई नहीं, 0]) गलत –

+0

देगा, मुझे किसी भी() 'की सुनवाई के बिना यह कैसे मिला? गजब का। – otocan

19
L == [None] * len(L) 

ज्यादा का उपयोग कर की तुलना में तेजी है सब() जब एल है सब कोई नहीं

$ python -m timeit -s'L=[None]*1000' 'all(x is None for x in L)' 
1000 loops, best of 3: 276 usec per loop 
$ python -m timeit -s'L=[None]*1000' 'L==[None]*len(L)' 
10000 loops, best of 3: 34.2 usec per loop 
0

यदि आप जांचना चाहते हैं कि सूची के सदस्य कोई नहीं हैं, तो आप आइटम पर लूप कर सकते हैं और जांच सकते हैं कि वे कोई नहीं हैं

आप अगर सूची ही कोई नहीं है, तो आप प्रकार (varlist) का उपयोग कर सकते हैं और यह वापस आ जाएगी कोई नहीं

आप

अगर कर सकते हैं (lst == कोई नहीं) जांच करना चाहते हैं: ... प्रिंट "हां"

काम करता है।

2

मैं व्यक्तिगत रूप से एक set बनाने और उसके बाद की पुष्टि करने के अगर यह एक तत्व None के साथ एक सेट के बराबर है पसंद करते हैं:

set(l) == {None} 

assert set([None, None, None]) == {None} 
assert set([None, 2, None]) != {None} 

नहीं सबसे तेजी से, लेकिन अभी भी तेजी से all(...) कार्यान्वयन से:

$ python -m timeit -s'L=[None]*1000' 'all(x is None for x in L)' 
10000 loops, best of 3: 59 usec per loop 
$ python -m timeit -s'L=[None]*1000' 'set(L)=={None}' 
100000 loops, best of 3: 17.7 usec per loop 
$ python -m timeit -s'L=[None]*1000' 'L==[None]*len(L)' 
100000 loops, best of 3: 7.17 usec per loop 
+0

बेंचमार्क कोड के लिए @JohnLaRooy को धन्यवाद –

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