पायथन का "इन" सेट ऑपरेटर है


143

मैं inसेट के लिए अजगर ऑपरेटर के बारे में थोड़ा उलझन में हूं ।

अगर मैं एक सेट है sऔर कुछ उदाहरण bहै, यह सच है कि b in sइसका मतलब है " वहाँ कुछ तत्व है xमें sऐसी है कि b == xहैtrue "?


77
क्या आप एक गणितज्ञ हैं? अत्यधिक जटिल तरीके से सरल चीजों का वर्णन करना;)
चोरमस्टर

13
कंप्यूटर वैज्ञानिक। मैं सिर्फ थोड़ा उलझन में हूं क्योंकि प्रलेखन कहता है "सदस्यता के लिए टेस्ट एक्स।" मेरे लिए इसका मतलब यह हो सकता है कि "इंस्टेंस x s में समाहित है" या "कुछ इंस्टेंस मौजूद है जिनका x के समान मान है"। मुझे नहीं पता कि यह एक पहचान या समानता की तुलना है।
देजस

6
@Dejas: चूंकि आप जानते हैं कि पायथन में दो ऑपरेटर हैं समानता और पहचान की तुलना, आपको एक प्रयोग का निर्माण करने में सक्षम होना चाहिए जो प्रत्येक की पुष्टि करता है। यदि आप उस प्रयोग को पोस्ट करते हैं तो यह मदद करेगा।
एस.लॉट

जवाबों:


101

हां, लेकिन इसका मतलब यह भी है hash(b) == hash(x), इसलिए वस्तुओं की समानता उन्हें समान बनाने के लिए पर्याप्त नहीं है।


14
ठीक है तो "क्या कोई तत्व x है जैसे कि हैश (b) == हैश (x) और x == b"?
देजस

12
यदि किसी ने अपने वर्ग के हैश फ़ंक्शन को एक मुड़ तरीके से लागू किया है, तो यह वही है जो उसे मिल सकता है (और लायक है)।
21

84

ये सही है। आप इसे दुभाषिया में इस तरह आज़मा सकते हैं:

>>> a_set = set(['a', 'b', 'c'])

>>> 'a' in a_set
True

>>>'d' in a_set
False

2
यह बहुत अच्छा परीक्षण नहीं है क्योंकि स्ट्रिंग स्थिरांक अक्सर इंटर्न होते हैं (कोशिश करते हैं a = 'a'; b = 'a'; a is b)। मैंने a = (1, 2, 3); b = (1, 2, 3); a == b; hash(a) == hash(b); a is b; a in set([b])इसके बजाय इसके साथ प्रयास किया ।
फिलिप

11

हां इसका मतलब यह हो सकता है, या यह एक सरल पुनरावृत्ति हो सकता है। उदाहरण के लिए: पुनरावृति के रूप में उदाहरण:

a=set(['1','2','3'])
for x in a:
 print ('This set contains the value ' + x)

इसी तरह एक चेक के रूप में:

a=set('ILovePython')
if 'I' in a:
 print ('There is an "I" in here')

संपादित: सूचियों और तारों के बजाय सेटों को शामिल करने के लिए संपादित किया गया


2
सेट के साथ इसका क्या करना है?
इग्नासियो वाज़केज़-अब्राम्स

अच्छी तरह से मैं एक सूची या एक स्ट्रिंग भी एक सेट के समान गुण है माना जा सकता है। वे तत्वों का एक संग्रह हैं।
अर्नब घोषाल

1
नहीं, सेट में एक चेक की स्थिति के लिए एक अतिरिक्त शर्त है जो अनुक्रम नहीं करते हैं।
इग्नासियो वाज़केज़-अब्राम्स

3

स्ट्रिंग्स, हालांकि वे setप्रकार नहीं हैं, inस्क्रिप्ट में सत्यापन के दौरान एक मूल्यवान संपत्ति है:

yn = input("Are you sure you want to do this? ")
if yn in "yes":
    #accepts 'y' OR 'e' OR 's' OR 'ye' OR 'es' OR 'yes'
    return True
return False

मुझे उम्मीद है कि यह आपको inइस उदाहरण के उपयोग को बेहतर ढंग से समझने में मदद करेगा ।


2
वह सेट नहीं है। न ही तार परस्पर जुड़े हुए हैं।
इग्नासियो वाज़केज़-अब्राम्स

7
... or 'e' or 'es' or 's'। इस व्यर्थ गलत उत्तर को हटाने पर विचार करें।
क्क्सप्लसोन

3

सेट डिक्ट्स की तुलना में अलग व्यवहार करते हैं, आपको सेट ऑपरेशंस जैसे इस्बसेट () का उपयोग करने की आवश्यकता होती है:

>>> k
{'ip': '123.123.123.123', 'pw': 'test1234', 'port': 1234, 'debug': True}
>>> set('ip,port,pw'.split(',')).issubset(set(k.keys()))
True
>>> set('ip,port,pw'.split(',')) in set(k.keys())
False

यह तो दिलचस्प है। और एक महान वास्तविक दुनिया आवेदन भी।
आर्मस्ट्रांगेस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.