2 सेट के संघ में सभी आइटम नहीं होते हैं


94

जब मैं नीचे के यूनियनों में दो सेटों के क्रम को बदलता हूं तो मुझे कैसे अलग परिणाम मिलते हैं?

set1 = {1, 2, 3}
set2 = {True, False}

print(set1 | set2)
# {False, 1, 2, 3}

print(set2 | set1)
#{False, True, 2, 3}

जवाबों:


110

क्यों संघ () में सभी आइटम शामिल नहीं हैं

1और Trueबराबर और डुप्लिकेट माना जाता है। इसी तरह 0और Falseसमान हैं:

>>> 1 == True
True
>>> 0 == False
True

किस समतुल्य मूल्य का उपयोग किया जाता है

जब कई समतुल्य मूल्य सामने आते हैं, तो सेट पहले वाले को देखता है:

>>> {0, False}
{0}
>>> {False, 0}
{False}

मूल्यों को विशिष्ट बनाने के तरीके

उन्हें अलग मानने के लिए, बस उन्हें एक (value, type)जोड़ी में जमा करें :

>>> set1 = {(1, int), (2, int), (3, int)}
>>> set2 = {(True, bool), (False, bool)}
>>> set1 | set2
{(3, <class 'int'>), (1, <class 'int'>), (2, <class 'int'>),
 (True, <class 'bool'>), (False, <class 'bool'>)}
>>> set1 & set2
set()

मानों को विशिष्ट बनाने का एक और तरीका उन्हें स्ट्रिंग के रूप में संग्रहीत करना है:

>>> set1 = {'1', '2', '3'}
>>> set2 = {'True', 'False'}
>>> set1 | set2
{'2', '3', 'False', 'True', '1'}
>>> set1 & set2
set()

आशा है कि यह रहस्य को साफ करता है और आगे का रास्ता दिखाता है :-)


टिप्पणियों से बचाया:

यह क्रॉस-टाइप समतुल्यता (यानी 0.0 == 0, True == 1और) को तोड़ने के लिए मानक तकनीक है Decimal(8.5) == 8.5)। इस तकनीक का उपयोग पायथन 2.7 के रेगुलर एक्सप्रेशन मॉड्यूल में किया जाता है, ताकि यूनिकोड रीजैक्स को अलग-अलग समतुल्य आवेशों से अलग-अलग कैच किया जा सके। तकनीक का उपयोग पायथन में भी किया जाता है। टाइप किए गए पैरामीटर के सत्य होने पर 3 configools.lru_cache () के लिए।

यदि ओपी को डिफ़ॉल्ट समतुल्य संबंध के अलावा कुछ और चाहिए, तो कुछ नए संबंध को परिभाषित करने की आवश्यकता है। उपयोग के मामले के आधार पर, यह स्ट्रिंग्स के लिए केस-असंवेदनशीलता, यूनिकोड के लिए सामान्यीकरण, दृश्य उपस्थिति (अलग-अलग दिखने वाली चीजें अलग-अलग मानी जाती हैं), पहचान (कोई दो अलग-अलग वस्तुओं को समान नहीं माना जाता है), एक मूल्य / प्रकार की जोड़ी, या कुछ अन्य फ़ंक्शन जो एक समतुल्य संबंध को परिभाषित करता है। ओपी के विशिष्ट उदाहरण को देखते हुए, ऐसा लगता है कि उसे या तो प्रकार या दृश्य भेद से या तो अंतर की उम्मीद थी।


20

पायथन में, Falseऔर 0समतुल्य माने जाते हैं, जैसे हैं Trueऔर 1। क्योंकि Trueऔर 1एक ही मूल्य माना जाता है, उनमें से केवल एक ही समय में एक सेट में मौजूद हो सकता है। कौन सा उस क्रम पर निर्भर करता है जो उन्हें सेट में जोड़ा जाता है। पहली पंक्ति में, set1पहले सेट के रूप में उपयोग किया जाता है, इसलिए हम 1परिणामी सेट में प्राप्त करते हैं। दूसरे सेट Trueमें, पहले सेट में है, इसलिए Trueपरिणाम में शामिल है।


6

यदि आप https://docs.python.org/3/library/stdtypes.html#boolean-values सेक्शन 4.12.10 देखें। बूलियन मान:

बूलियन मूल्य दो स्थिर वस्तुएं झूठी और सच्ची हैं । उनका उपयोग सत्य मूल्यों का प्रतिनिधित्व करने के लिए किया जाता है (हालांकि अन्य मूल्यों को भी गलत या सत्य माना जा सकता है)। संख्यात्मक संदर्भों में (उदाहरण के लिए जब एक अंकगणितीय ऑपरेटर के तर्क के रूप में उपयोग किया जाता है), वे क्रमशः पूर्णांक 0 और 1 की तरह व्यवहार करते हैं।


4

तुलना ऑपरेटर ( ==, !=) बूलियन के लिए Trueऔर False1 और 0 से मेल खाने के लिए परिभाषित किया गया है ।

इसीलिए, सेट यूनियन में, जब यह जांचता है कि क्या Trueनए सेट में पहले से ही है, तो उसे सच्चाई का जवाब मिलता है:

>>> True in {1}
True
>>> 1 in {True}
True
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.