2012-10-17 41 views
293

मैं देख रहा हूँ लोग any उपयोग कर रहे हैं एक और सूची इकट्ठा करने के लिए है कि कोई आइटम एक सूची में मौजूद है को देखने के लिए, लेकिन वहाँ एक त्वरित तरीका सिर्फ करने के लिए ?:क्या सूचियों के लिए कोई छोटा फ़ंक्शन है?

if list.contains(myItem): 
    # do something 

उत्तर

517

आप इस वाक्य रचना का उपयोग कर सकते है:

if myItem in list: 
    # do something 

इसके अलावा, उलटा ऑपरेटर:

if myItem not in list: 
    # do something 

यह सूची, tuples, सेट और dicts (जाँच कुंजी) के लिए काम करते ठीक है।

नोट कि यह सूचियों और tuples में एक ओ (एन) ऑपरेशन है, लेकिन सेट और dicts में एक ओ (1) ऑपरेशन है।

+1

होगा numpy उदाहरणों या numpy उदाहरणों के अंदर मूल्यों के लिए इस चेक? –

+0

सावधान रहें! यह मेल खाता है, जबकि यह संभवतया आप अपेक्षा नहीं करते थे: 'o =' - छोड़ें '; ओ में ("--skip-ias"); # सच है! ' –

0

सूची विधि index-1 वापस लौटाएगी यदि आइटम मौजूद नहीं है, और यदि मौजूद है तो सूची में आइटम की अनुक्रमणिका वापस कर देगा। वैकल्पिक रूप से एक if बयान में आप निम्न कर सकते हैं:

if myItem in list: 
    #do things 

तुम भी अगर एक तत्व के साथ एक सूची में नहीं है जाँच कर सकते हैं निम्नलिखित अगर बयान:

if myItem not in list: 
    #do things 
+11

यदि तत्व मौजूद नहीं है, तो 'अनुक्रमणिका' विधि वापस नहीं आती है, यह' ValueError' अपवाद फेंकता है। – MondKin

49

इसके अलावा करने के लिए अन्य क्या कहा है , आपको यह भी जानने में रुचि हो सकती है कि inlist.__contains__ विधि को कॉल करना है, जिसे आप लिखने वाले किसी भी वर्ग पर परिभाषित कर सकते हैं और पूरी तरह से पाइथन का उपयोग करने के लिए बेहद आसान हो सकते हैं।  

एक गूंगा उपयोग हो सकता है:

>>> class ContainsEverything: 
    def __init__(self): 
     return None 
    def __contains__(self, *elem, **k): 
     return True 


>>> a = ContainsEverything() 
>>> 3 in a 
True 
>>> a in a 
True 
>>> False in a 
True 
>>> False not in a 
False 
>>>   
0

मैं True हो रही है, तो एक सूची के लिए एक आइटम की घटनाओं के किसी भी संख्या में शामिल है के लिए हाल ही में इस एक लाइनर के साथ आया था, या False अगर यह कोई घटनाओं या कुछ भी नहीं होता है बिलकुल। next(...) का उपयोग करके यह एक डिफ़ॉल्ट वापसी मान (False) देता है और इसका मतलब है कि इसे संपूर्ण सूची समझने से काफी तेज़ चलना चाहिए।

list_does_contain = next((True for item in list_to_test if item == test_item), False)

NumPy सरणी युक्त एक सूची के साथ,
+0

मेरे मामले में मेरे पास श्रेणी नामक ऑब्जेक्ट की एक सूची है और इसे केवल संपत्ति लिंक के लिए परीक्षण करने की आवश्यकता है, इसलिए यह समाधान मेरे मामले में बेहतर फिट बैठता है। धन्यवाद – rodrigorf