के बारे में list
सबसे पहले एक बहुत ही महत्वपूर्ण बिंदु, जिसमें से सब कुछ का पालन होगा (मुझे आशा है)।
साधारण पायथन में, listकिसी भी तरह से विशेष नहीं है (निर्माण के लिए प्यारा सिंटैक्स होने के अलावा, जो ज्यादातर एक ऐतिहासिक दुर्घटना है)। एक बार एक सूची [3,2,6]बना लेने के बाद, यह सभी इरादों और उद्देश्यों के लिए होता है, बस एक साधारण पायथन ऑब्जेक्ट, जैसे एक संख्या 3, सेट {3,7}या एक फ़ंक्शन lambda x: x+5।
(हां, यह अपने तत्वों को बदलने का समर्थन करता है, और यह पुनरावृत्ति, और कई अन्य चीजों का समर्थन करता है, लेकिन यह सिर्फ एक प्रकार है: यह कुछ कार्यों का समर्थन करता है, जबकि कुछ अन्य का समर्थन नहीं करते। इंट एक शक्ति बढ़ाने का समर्थन करता है, लेकिन ऐसा नहीं है। इसे बहुत खास बनाएं - यह सिर्फ एक इंट है। लैंबडा कॉलिंग का समर्थन करता है, लेकिन यह इसे बहुत खास नहीं बनाता है - यही लैम्बडा के लिए है, आखिरकार :)।
के बारे में and
andएक ऑपरेटर नहीं है (आप इसे "ऑपरेटर" कह सकते हैं, लेकिन आप "ऑपरेटर" के लिए भी कॉल कर सकते हैं :)। पायथन में ऑपरेटर्स कुछ प्रकार की वस्तुओं पर बुलाए गए (के माध्यम से कार्यान्वित) तरीके हैं, जो आमतौर पर उस प्रकार के हिस्से के रूप में लिखे जाते हैं। इसके कुछ ऑपरेंड का मूल्यांकन करने के लिए कोई तरीका नहीं है, लेकिन ऐसा andकर सकते हैं (और चाहिए)।
उस का परिणाम यह है कि andअतिभारित नहीं किया जा सकता है, जैसे forअतिभारित नहीं किया जा सकता है। यह पूरी तरह से सामान्य है, और एक निर्दिष्ट प्रोटोकॉल के माध्यम से संचार करता है। आप जो कर सकते हैं वह प्रोटोकॉल के आपके हिस्से को अनुकूलित करता है, लेकिन इसका मतलब यह नहीं है कि आप andपूरी तरह से व्यवहार को बदल सकते हैं । प्रोटोकॉल है:
पायथन की कल्पना "ए और बी" की व्याख्या करें (यह सचमुच इस तरह से नहीं होता है, लेकिन यह समझने में मदद करता है)। जब यह "और" की बात आती है, तो यह उस वस्तु को देखता है जिसका उसने अभी मूल्यांकन किया है (ए), और उससे पूछता है: क्या आप सच हैं? ( नहीं : आप हैं True?) यदि आप एक वर्ग के लेखक हैं, तो आप इस उत्तर को अनुकूलित कर सकते हैं। यदि aउत्तर "नहीं", and(पूरी तरह से ख को छोड़ दिया जाता है, तो इसका बिल्कुल भी मूल्यांकन नहीं किया जाता है, और) कहता है: aमेरा परिणाम है ( नहीं : गलत मेरा परिणाम है)।
यदि aउत्तर नहीं है, तो andयह पूछता है: आपकी लंबाई क्या है? (फिर, आप इसे एक लेखक के aवर्ग के रूप में अनुकूलित कर सकते हैं )। यदि aउत्तर 0 है, andतो ऊपर जैसा ही है - इसे गलत मानते हैं (गलत नहीं ), ख को छोड़ देता है, और aपरिणाम के रूप में देता है ।
अगर aदूसरे प्रश्न का उत्तर ("आपकी लंबाई क्या है") के अलावा कुछ है, या यह बिल्कुल भी जवाब नहीं देता है, या यह पहले वाले को "हाँ" का जवाब देता है ("आप सच हैं"), andबी का मूल्यांकन करता है, और कहता है: bमेरा परिणाम है। ध्यान दें कि यह कोई प्रश्न नहीं पूछता है b।
यह सब कहने का दूसरा तरीका यह है कि a and bलगभग एक ही है b if a else a, केवल एक बार मूल्यांकन करने के अलावा।
अब एक पेन और पेपर के साथ कुछ मिनट के लिए बैठें, और अपने आप को समझाएं कि जब {a, b} {ट्रू, फाल्स} का सबसेट है, तो यह ठीक उसी तरह काम करता है जैसा आप बूलियन ऑपरेटर्स से उम्मीद करते हैं। लेकिन मुझे आशा है कि मैंने आपको आश्वस्त किया है कि यह बहुत अधिक सामान्य है, और जैसा कि आप देखेंगे, इस तरह से बहुत अधिक उपयोगी है।
उन दोनों को एक साथ रखना
अब मुझे आशा है कि आप अपने उदाहरण को समझेंगे। 1. andयदि कोई सूची, सूची, भेड़ का बच्चा या एक वर्ग Argmhbl की वस्तु है तो परवाह नहीं करता है। यह सिर्फ mylist1 प्रोटोकॉल के सवालों के जवाब के बारे में परवाह है। और हां, mylist1 लंबाई के बारे में सवाल का 5 जवाब देता है, इसलिए mylist2 लौटाता है। और बस। इसका mylist1 और mylist2 के तत्वों से कोई लेना-देना नहीं है - वे कहीं भी तस्वीर में प्रवेश नहीं करते हैं।
दूसरा उदाहरण: &परlist
दूसरी ओर, उदाहरण के लिए &, किसी भी अन्य की तरह एक ऑपरेटर है +। इसे उस वर्ग पर एक विशेष विधि को परिभाषित करके एक प्रकार के लिए परिभाषित किया जा सकता है। intइसे बिटवाइज़ "और" के रूप में परिभाषित करता है, और बूल इसे तार्किक "और" के रूप में परिभाषित करता है, लेकिन यह सिर्फ एक विकल्प है: उदाहरण के लिए, सेट्स और कुछ अन्य ऑब्जेक्ट जैसे तानाशाह कुंजी दृश्य इसे एक सेट चौराहे के रूप में परिभाषित करते हैं। listबस इसे परिभाषित नहीं करता है, शायद क्योंकि गुइडो इसे परिभाषित करने के किसी भी स्पष्ट तरीके के बारे में नहीं सोचते थे।
numpy
दूसरे पैर पर: डी, NumPy सरणी हैं विशेष, या कम से कम वे बनने की कोशिश कर रहे हैं। बेशक, numpy.array सिर्फ एक वर्ग है, यह andकिसी भी तरह से ओवरराइड नहीं कर सकता है , इसलिए यह अगली सबसे अच्छी बात करता है: जब आपसे पूछा जाता है "क्या आप सच हैं", numpy.array एक ValueError को उठाता है, प्रभावी रूप से कह रहा है "कृपया सवाल को फिर से लिखें।" सच्चाई का दृश्य आपके मॉडल में फिट नहीं होता है "। (ध्यान दें कि ValueError संदेश के बारे में बात नहीं करता है and- क्योंकि numpy.array नहीं जानता कि यह सवाल कौन पूछ रहा है; यह सिर्फ सच के बारे में बोलता है।)
के लिए &, यह पूरी तरह से अलग कहानी है। numpy.array इसे अपनी इच्छानुसार परिभाषित कर सकता है, और यह &अन्य ऑपरेटरों के साथ लगातार परिभाषित करता है : पॉइंटवाइज़। तो आप अंत में वही प्राप्त करें जो आप चाहते हैं।
HTH,
np.bitwise_and()औरnp.logical_and()और दोस्तों के भ्रम से बचने के।