2011-09-21 14 views
10

में एक सूची के साथ विस्तार का अप्रत्याशित व्यवहार मैं समझने की कोशिश कर रहा हूं कि पाइथन में कैसे काम करता है और यह काफी कुछ नहीं कर रहा है जो मैं उम्मीद करता हूं।पायथन

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6].extend(a) 
>>> b 
>>> 

लेकिन मैं अपेक्षा की होगी: उदाहरण के लिए

[4, 5, 6, 1, 2, 3] 

क्यों एक नहीं लौटने के बजाय सूची का विस्तार है?

+5

आपको उम्मीद है कि 'बी = [4, 5, 6] + ए' क्या करता है। –

उत्तर

22

extend() विधि मौजूदा सरणी के लिए संलग्न कर देता है और None देता है। आपके मामले में, आप एक सरणी बना रहे हैं - [4, 5, 6] - फ्लाई पर, इसे विस्तारित करना और फिर इसे छोड़ना। परिवर्तनीय bNone के वापसी मूल्य के साथ समाप्त होता है।

+0

धन्यवाद, यह सही समझ में आता है। – TimothyAWiseman

6

list अधिकांश भाग के लिए जगहें संचालित होती हैं, और None लौटाती हैं।

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6] 
>>> b.extend(a) 
>>> b 
[4, 5, 6, 1, 2, 3] 
3

extend अपना ऑपरेंड बढ़ाता है, लेकिन कोई मान वापस नहीं करता है। यदि आप किया था:

b = [4, 5, 6] 
b.extend(a) 

तो फिर तुम अपेक्षित परिणाम मिलेगा।

2

अन्य ने list विधियों को इंगित किया है, विशेष रूप से जो सूची को बदलते हैं, सूची के संदर्भ के बजाय None लौटाते हैं। कारण वे ऐसा करते हैं ताकि आप इस बारे में भ्रमित न हों कि सूची की एक प्रति बनाई गई है या नहीं। यदि आप a = b.extend([4, 5, 6]) लिख सकते हैं तो ab जैसी ही सूची के संदर्भ में है? b बयान द्वारा संशोधित किया गया था? उत्परिवर्तित सूची के बजाय None लौटकर, इस तरह के कथन को बेकार बना दिया जाता है, आप जल्दी से पता लगाते हैं कि a में ऐसा नहीं है जो आपने सोचा था, और आप इसके बजाय b.extend(...) लिखना सीखते हैं। इस प्रकार स्पष्टता की कमी हटा दी गई है।

1

मुझे यह समस्या थी और जबकि अन्य उत्तरों सही स्पष्टीकरण प्रदान करते हैं, मुझे जो समाधान/कामकाज पसंद आया वह यहां नहीं है। अतिरिक्त ऑपरेटर का उपयोग एक साथ सूचियों को जोड़ देगा और परिणाम वापस कर देगा। मेरे मामले में मैं color को 3-अंकों की सूची और opacity के रूप में एक फ्लोट के रूप में बुककीपिंग कर रहा था, लेकिन लाइब्रेरी को चौथे अंक के रूप में अस्पष्टता के साथ 4 अंकों की सूची के रूप में रंग की आवश्यकता थी। मैं एक throwaway चर नाम के लिए नहीं करना चाहता था इसलिए इस वाक्य रचना मेरी जरूरतों के अनुकूल:

color = [1, 1, 0] 
opacity = 0.75 
plot.setColor(color + [opacity]) 

यह मक्खी और संयोजन के बाद एक नई सूची पर अस्पष्टता के लिए एक नई सूची बनाता है, लेकिन है कि मेरी प्रयोजनों के लिए ठीक है। मैं बस एक फ्लोट के साथ एक सूची विस्तार और मूल सूची या फ्लोट को प्रभावित किए बिना परिणामी सूची लौटने के लिए कॉम्पैक्ट वाक्यविन्यास चाहता था।