मैं जानना चाहूंगा कि यह मान्य क्यों है:
set(range(10)) - set(range(5))
लेकिन यह मान्य नहीं है:
set(range(10)) + set(range(5))
क्या ऐसा इसलिए है क्योंकि '+' का मतलब चौराहा और मिलन दोनों हो सकता है?
मैं जानना चाहूंगा कि यह मान्य क्यों है:
set(range(10)) - set(range(5))
लेकिन यह मान्य नहीं है:
set(range(10)) + set(range(5))
क्या ऐसा इसलिए है क्योंकि '+' का मतलब चौराहा और मिलन दोनों हो सकता है?
~एक द्विआधारी ऑपरेटर थे, तो आप |+ संघ के लिए, और ~अंतर के लिए हो सकते हैं , जो बहुत अधिक संतुलित है।
जवाबों:
अजगर सेट +ऑपरेटर के लिए एक कार्यान्वयन नहीं है ।
आप |सेट संघ के लिए और &सेट चौराहे के लिए उपयोग कर सकते हैं ।
-सेट अंतर के रूप में क्रियान्वयन करते हैं । आप ^सममित सेट अंतर के लिए भी उपयोग कर सकते हैं (यानी, यह केवल एक सेट में दिखाई देने वाली वस्तुओं के साथ एक नया सेट लौटाएगा लेकिन दोनों सेटों में दिखाई नहीं देगा)।
पायथन ने इसका उपयोग |करने के बजाय चुना +क्योंकि सेट यूनियन एक अवधारणा है जो बूलियन डिसंक्शन से निकटता से संबंधित है; बिट वेक्टर (जो अजगर में बस int/ हैं long) इस ऑपरेशन को बूलियन मानों के अनुक्रम में परिभाषित करते हैं और इसे "बिटवाइज़" कहते हैं। वास्तव में यह ऑपरेशन सेट यूनियन के समान है कि बाइनरी पूर्णांकों को कभी-कभी "बिट सेट" भी कहा जाता है, जहां सेट में तत्वों को प्राकृतिक संख्या में लिया जाता है।
क्योंकि intपहले से ही सेट-जैसे ऑपरेटरों को परिभाषित करता है |, &और ^, नए setप्रकार के लिए समान इंटरफ़ेस का उपयोग करना स्वाभाविक था ।
सेट सिद्धांत में + प्रतीक सामान्य रूप से दो सेटों की असंगति को दर्शाता है । यदि A और B सेट हैं, तो उनके असंतुष्ट संघ को सेट माना जाता है
A + B = {(a, 1) | a in A} U {(b, 2) | b in B}
यानी, असंतुष्ट संघ का निर्माण करने के लिए, हम ए के सभी तत्वों और बी के सभी तत्वों को अलग-अलग टैग के साथ चिह्नित करते हैं (उदाहरण में मैंने संख्या 1 और 2 का उपयोग किया था, लेकिन कोई भी दो अलग-अलग "चीजें" काम करेगी) और फिर ले जाएं दो परिणामी सेटों का मिलन। उपरोक्त उदाहरण में, मैंने सामान्य गणितीय संकेतन के समान बनाने के लिए सेट यूनियन के लिए 'यू' का उपयोग किया है; नीचे मैं पायथन संकेतन का उपयोग करता हूं, '' | ' संघ के लिए, और 'और' चौराहे के लिए।
यदि A और B असंतुष्ट हैं, तो A + B में A के साथ 1-टू -1 पत्राचार है B. यदि वे नहीं हैं, तो A & B में सभी सामान्य तत्व x A + B में दो बार दिखाई देते हैं: एक बार (x, 1) के रूप में, और एक बार (x, 2) के रूप में।
इसलिए, चूंकि '+' चिह्न का एक सेट ऑपरेशन के रूप में काफी अच्छी तरह से स्थापित अर्थ है, मुझे यह बहुत संगत लगता है कि पायथन सेट या संघ के लिए इस प्रतीक का उपयोग नहीं करता है। संभवतः पायथन डिजाइनर (ओं) को यह ध्यान में था जब उन्होंने सेट ऑपरेटरों को चुना था।
|ने सेट यूनियनों के लिए ऑपरेटर को ओवरलोड किया था, लेकिन यह करने में नाकाम रहा कि गुइडो ने +सेट यूनियनों के लिए ऑपरेटर को ओवरलोड करने से क्यों रोका । आखिरकार, ऐसा करने से +संचालक के साथ ऑर्थोगोनलिटी संरक्षित हो जाएगी, जो सूची के अतिरिक्त ओवरलोडेड थे। चूंकि पायथन की पहचान गणितीय संकेतन के साथ अनुरूप है (उदाहरण के लिए, jजटिल संख्याओं के जटिल घटक को दर्शाते हुए), गुइडो की जिज्ञासु पसंद अंत में समझ में आती है।
ज़रूर, वे +एक संघ करने के लिए इस्तेमाल कर सकते थे , लेकिन तब भी चौराहे के लिए एक प्रतीक की आवश्यकता होगी। चौराहे के |लिए संघ सममित है &और इस तरह एक बेहतर विकल्प है।
क्योंकि |साधन का अर्थ है, मिलन और &प्रतिच्छेदन। समान फ़ंक्शन के लिए कई ऑपरेटरों को जोड़ने का स्पष्ट रूप से कोई कारण नहीं है।
उपयोग करने के कारण |और &शायद बिटवाइज़ ऑपरेशन में वापस चला जाता है। यदि आप किसी संख्या में बिट्स के रूप में एक सेट का प्रतिनिधित्व करते हैं, तो वे ऑपरेटर हैं जो आप संघ और प्रतिच्छेद करने के लिए उपयोग करेंगे।
+साधारण के रूप में संघ से बंधा नहीं है और -अंतर सेट करने के लिए है।
क्योंकि सेट अंतर एक बहुत ही उपयोगी और सामान्य रूप से ज्ञात अवधारणा है, लेकिन “सेट जोड़” की कोई (सार्वभौमिक उपयोग की गई) अवधारणा नहीं है।
+ रूप में परिभाषित किया जाता है । कुछ इसे सममित अंतर के लिए उपयोग करते हैं । किसी भी तरह से, इसका उपयोग करने वाला कोई भी कागज या तो इसे कुछ और कहता है या इसे पहले परिभाषित करता है।
|संघ का मतलब है। आप क्या पूछ रहे हो?