2012-04-18 16 views
7

क्या __contains__ एक सूची वर्ग की विधि जांचती है कि क्या कोई वस्तु स्वयं सूची का एक तत्व है, या यह जांचता है कि सूची में दिए गए पैरामीटर के बराबर तत्व है या नहीं?पायथन सूची कक्षा __contains__ विधि कार्यक्षमता

क्या आप मुझे प्रदर्शित करने के लिए एक उदाहरण दे सकते हैं?

उत्तर

9
>>> a = [[]] 
>>> b = [] 
>>> b in a 
True 
>>> b is a[0] 
False 

यह साबित करता है कि यह एक मूल्य जांच (डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से) है, पहचान पहचान नहीं। ध्यान रखें कि यदि कक्षा एक पहचान जांच करने के लिए __contains__() ओवरराइड कर सकती है तो कक्षा हो सकती है। लेकिन फिर, डिफ़ॉल्ट रूप से, नहीं।

+0

यह बिल्कुल सही है! –

1

यह कक्षा पर निर्भर करता है कि यह चेक कैसे करता है। बिल्टिन list के लिए यह == ऑपरेटर का उपयोग करता है; अन्यथा आप उदास नहीं कर सके 'something' in somelist सुरक्षित रूप से उपयोग करें।

अधिक विशिष्ट होने के लिए, यह जांचें कि आइटम सूची में किसी आइटम के बराबर है - इसलिए आंतरिक रूप से यह hash(a) == hash(b) तुलना की संभावना है; यदि हैश ऑब्जेक्ट्स के बराबर हैं तो शायद इसकी तुलना भी की जा सकती है।

+1

यह सिर्फ हैश की जांच नहीं होगी - हैश बराबर मूल्यों के बराबर हो सकते हैं। –

+0

धन्यवाद दोस्तों जो बहुत उपयोगी जानकारी है! –

+0

यह गलत है। मैंने अभी '__eq__' विधि को परिभाषित किया है जो (अनैच्छिक रूप से)' __contains__' या 'in' द्वारा उठाया गया है। इसलिए, यह सबसे अधिक संभावना है 'सूची' 'a .__ eq __ (बी)' तुलना लागू करता है। – Atcold

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