दिलचस्प पोस्ट
जब jQuery का उपयोग करते समय "$" के साथ चर / उपसर्ग क्यों? सी में साझा वैश्विक चर कैसे एक UIView में एक xib फ़ाइल को लोड करने के लिए सी ++, फ्री-स्टोर बनाम हीप कैसे textarea के resizable संपत्ति को निष्क्रिय करने के लिए? जावास्क्रिप्ट में मैं एकाधिक विभाजक के साथ एक स्ट्रिंग कैसे विभाजित करूं? LINQ में केस असंवेदनशील है स्वतंत्र चार *: अमान्य अगले आकार (तेज़) CreateWindowExW का उपयोग करते समय हीप भ्रष्टाचार कस्टम प्रोटोकॉल समर्थित होने की जांच कैसे करें संदर्भों के सरणी अवैध क्यों हैं? क्या मुझे एएसपी.नेट एमवीसी में स्थानांतरित करना चाहिए? मूल्यों का एक एकल, यादृच्छिक संयोजन का चयन करने के लिए एल्गोरिथ्म? कैसे एक एसपीए एसईओ crawlable बनाने के लिए? उन लोगों से पूछताछ करें जो मेरे फेसबुक पेज को पसंद करते हैं

दो सूचियों को शामिल करना – '+ =' के बीच का अंतर और विस्तार ()

मैंने देखा है कि वास्तव में दो (शायद अधिक) पायथन में सूचियों को जोड़ने के तरीके हैं: एक तरह से विस्तार () विधि का उपयोग करना है:

a = [1, 2] b = [2, 3] b.extend(a) 

प्लस (+) ऑपरेटर का उपयोग करने के लिए दूसरा:

 b += a 

अब मुझे आश्चर्य है: इन दो विकल्पों में से कौन सी विकल्प है जो 'पयथोनिक' सूची संयोजन का तरीका है और दोनों के बीच अंतर है (मैं आधिकारिक पायथन ट्यूटोरियल को देखा है, लेकिन इस विषय के बारे में कुछ भी नहीं मिल सकता है)।

वेब के समाधान से एकत्रित समाधान "दो सूचियों को शामिल करना – '+ =' के बीच का अंतर और विस्तार ()"

.extend स्तर पर एकमात्र अंतर यह है कि .extend तरीके से फ़ंक्शन कॉल शामिल होता है, जो पायथन में INPLACE_ADD तुलना में थोड़ा अधिक महंगा INPLACE_ADD

यह वास्तव में कुछ भी नहीं है, आप के बारे में चिंता करना चाहिए, जब तक कि आप इस ऑपरेशन को अरबों बार प्रदर्शन नहीं करते हैं यह संभावना है, हालांकि, यह बाधा कुछ और जगह झूठ होगा।

आप + = गैर-लोकल चर के लिए उपयोग नहीं कर सकते (चर जो फ़ंक्शन के लिए स्थानीय नहीं है और वैश्विक भी नहीं है)

 def main(): l = [1, 2, 3] def foo(): l.extend([4]) def boo(): l += [5] foo() print l boo() # this will fail main() 

इसका कारण यह है कि केस कंपाइलर का विस्तार करने के लिए LOAD_DEREF निर्देश का उपयोग करते हुए चर को लोड किया जाएगा, लेकिन + = के लिए यह LOAD_FAST का उपयोग LOAD_FAST – और आपको *UnboundLocalError: local variable 'l' referenced before assignment* मिलता है *UnboundLocalError: local variable 'l' referenced before assignment*

आप चेन फ़ंक्शन कॉल कर सकते हैं, लेकिन आप सीधे = फ़ंक्शन कॉल नहीं कर सकते हैं:

 class A: def __init__(self): self.listFoo = [1, 2] self.listBar = [3, 4] def get_list(self, which): if which == "Foo": return self.listFoo return self.listBar a = A() other_list = [5, 6] a.get_list("Foo").extend(other_list) a.get_list("Foo") += other_list #SyntaxError: can't assign to function call 

पायथन के ज़ेन के अनुसार:

जटिल जटिल से बेहतर है

b += a से अधिक सरल है। b.extend(a)

बिल्टिन्स इतनी अत्यधिक अनुकूलित हैं कि कोई वास्तविक प्रदर्शन अंतर नहीं है

मैं कहूंगा कि यह नक्सली के साथ आने पर कुछ फर्क पड़ता है (मैंने देखा कि प्रश्न पूछता है कि दो सूचियों को सम्मिलित करने के बारे में न तो अंडाकार सरणी है, लेकिन चूंकि यह शुरुआती के लिए एक समस्या है, जैसे कि मुझे, मुझे उम्मीद है कि यह किसी को मदद कर सकता है जो इस पोस्ट का समाधान चाहते हैं), पूर्व के लिए

 import numpy as np a = np.zeros((4,4,4)) b = [] b += a 

यह त्रुटि के साथ वापस आ जाएगी

ValueError: आकार (0,) (4,4,4) के साथ एक साथ प्रसारित नहीं किया जा सकता

b.extend(a) पूरी तरह से काम करता है

अजगर 3.5.2 स्रोत कोड से: कोई बड़ा अंतर नहीं।

 static PyObject * list_inplace_concat(PyListObject *self, PyObject *other) { PyObject *result; result = listextend(self, other); if (result == NULL) return result; Py_DECREF(result); Py_INCREF(self); return (PyObject *)self; }