जब मैं नीचे के यूनियनों में दो सेटों के क्रम को बदलता हूं तो मुझे कैसे अलग परिणाम मिलते हैं?
set1 = {1, 2, 3}
set2 = {True, False}
print(set1 | set2)
# {False, 1, 2, 3}
print(set2 | set1)
#{False, True, 2, 3}
जब मैं नीचे के यूनियनों में दो सेटों के क्रम को बदलता हूं तो मुझे कैसे अलग परिणाम मिलते हैं?
set1 = {1, 2, 3}
set2 = {True, False}
print(set1 | set2)
# {False, 1, 2, 3}
print(set2 | set1)
#{False, True, 2, 3}
जवाबों:
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 () के लिए।
यदि ओपी को डिफ़ॉल्ट समतुल्य संबंध के अलावा कुछ और चाहिए, तो कुछ नए संबंध को परिभाषित करने की आवश्यकता है। उपयोग के मामले के आधार पर, यह स्ट्रिंग्स के लिए केस-असंवेदनशीलता, यूनिकोड के लिए सामान्यीकरण, दृश्य उपस्थिति (अलग-अलग दिखने वाली चीजें अलग-अलग मानी जाती हैं), पहचान (कोई दो अलग-अलग वस्तुओं को समान नहीं माना जाता है), एक मूल्य / प्रकार की जोड़ी, या कुछ अन्य फ़ंक्शन जो एक समतुल्य संबंध को परिभाषित करता है। ओपी के विशिष्ट उदाहरण को देखते हुए, ऐसा लगता है कि उसे या तो प्रकार या दृश्य भेद से या तो अंतर की उम्मीद थी।
पायथन में, False
और 0
समतुल्य माने जाते हैं, जैसे हैं True
और 1
। क्योंकि True
और 1
एक ही मूल्य माना जाता है, उनमें से केवल एक ही समय में एक सेट में मौजूद हो सकता है। कौन सा उस क्रम पर निर्भर करता है जो उन्हें सेट में जोड़ा जाता है। पहली पंक्ति में, set1
पहले सेट के रूप में उपयोग किया जाता है, इसलिए हम 1
परिणामी सेट में प्राप्त करते हैं। दूसरे सेट True
में, पहले सेट में है, इसलिए True
परिणाम में शामिल है।
यदि आप https://docs.python.org/3/library/stdtypes.html#boolean-values सेक्शन 4.12.10 देखें। बूलियन मान:
बूलियन मूल्य दो स्थिर वस्तुएं झूठी और सच्ची हैं । उनका उपयोग सत्य मूल्यों का प्रतिनिधित्व करने के लिए किया जाता है (हालांकि अन्य मूल्यों को भी गलत या सत्य माना जा सकता है)। संख्यात्मक संदर्भों में (उदाहरण के लिए जब एक अंकगणितीय ऑपरेटर के तर्क के रूप में उपयोग किया जाता है), वे क्रमशः पूर्णांक 0 और 1 की तरह व्यवहार करते हैं।