2011-06-14 26 views
46

मैं एक सूची है:खाली सूची के अंत में कैसे जुड़ें?

list1=[] 

सूची की लंबाई अनिर्धारित है तो मैं इस तरह की तरह List1 के अंत में वस्तुओं संलग्न करने के लिए कोशिश कर रहा हूँ:

for i in range(0, n): 

    list1=list1.append([i]) 

लेकिन मेरी उत्पादन इस त्रुटि दे रहता है : विशेषता त्रुटि: 'noneType' ऑब्जेक्ट में कोई विशेषता नहीं है 'append'

क्या ऐसा इसलिए है क्योंकि सूची 1 खाली सूची के रूप में शुरू होती है? मैं इस त्रुटि को कैसे ठीक करूं?

+25

संख्या -1 कृपया। तथ्य यह है कि संलग्न() रिटर्न कोई भी शुरुआत करने वालों को चाल नहीं कर सकता है। सवाल वास्तविक है। –

उत्तर

47

append वास्तव में सूची सूची बदलती है। इसके अलावा, यह एक सूची में आइटम लेता है। इसलिए, आप सभी की जरूरत

for i in range(n): 
    list1.append(i) 

(वैसे, ध्यान दें कि आप इस मामले में range(n) उपयोग कर सकते हैं,।) है

मुझे लगता है अपने वास्तविक उपयोग और अधिक जटिल है, लेकिन आप उपयोग करने में सक्षम हो सकता है एक सूची समझ है, जो इस के लिए और अधिक pythonic है:

list1 = [i for i in range(n)] 

या, इस मामले में, पायथन 2.x में वास्तव में range(n) सूची आप पहले से ही चाहते हैं कि बनाता है, हालांकि अजगर 3.x में, आप list(range(n)) की जरूरत ।

+0

धन्यवाद कि अंतिम बिट बहुत उपयोगी था और मेरे कोड को एक गुच्छा – LostLin

+0

@AndrewJaffe द्वारा सूचीबद्ध किया गया था, सूचियों की सूची के बारे में क्या? –

+1

यह इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं। 'append' बाहरीतम सूची में जोड़ता है, लेकिन आप इसे अनुक्रमणित करके नेस्टेड सूची में जोड़ सकते हैं:' a [-1] .append (3) '''' के अंतिम उपन्यास में '3' जोड़ता है। –

13

आपको असाइनमेंट ऑपरेटर की आवश्यकता नहीं है। रिटर्न संलग्न करें कोई नहीं।

+4

एस/की आवश्यकता नहीं है/नहीं चाहिए/ –

+0

शून्य पाइथन में मौजूद नहीं है। शून्य वास्तव में कोई नहीं है –

2

append कोई भी रिटर्न नहीं देता है, इसलिए दूसरे पुनरावृत्ति पर आप किसी भी प्रकार के टाइप append को कॉल कर रहे हैं। ,

for i in range(0, n): 
    list1.append([i]) 
0

तरह Mikola कहा, append() एक शून्य रिटर्न तो हर यात्रा आप एक nonetype को List1 स्थापित कर रहे हैं क्योंकि संलग्न एक nonetype लौटा रहा है: बस काम को हटा दें। अगले पुनरावृत्ति पर, सूची 1 शून्य है इसलिए आप एक शून्य की संलग्न विधि को कॉल करने का प्रयास कर रहे हैं। नल के पास विधियां नहीं हैं, इसलिए आपकी त्रुटि है।

4

मिकोला का सही उत्तर है लेकिन थोड़ा और स्पष्टीकरण है। यह पहली बार चलाएगा, लेकिन क्योंकि लूप के पहले पुनरावृत्ति के बाद None रिटर्न जोड़ता है, इसलिए आपका असाइनमेंट list1None के बराबर होगा और इसलिए दूसरी पुनरावृत्ति पर त्रुटि फेंक दी जाएगी।

0

ध्यान दें कि आप भी सूची के भीतर आवश्यक स्थिति में संख्या डाल करने के क्रम में डालने का उपयोग कर सकते हैं:

initList = [1,2,3,4,5] 
initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5] 

और यह भी ध्यान दें कि अजगर में आप हमेशा विधि लेन()

का उपयोग करके सूची लंबाई प्राप्त कर सकते हैं
1

मैं व्यक्तिगत रूप से append से + ऑपरेटर पसंद करते हैं:

for i in range(0, n): 

    list1 += [[i]] 

लेकिन यह एक नई सूची हर बार पैदा कर रही है, तो प्रदर्शन महत्वपूर्ण है तो शायद सबसे अच्छा नहीं हो सकता है।

-1

my_list.append (...) का उपयोग करें और उपयोग न करें और सूची के रूप में जोड़ने के लिए अन्य सूची उत्परिवर्तनीय हैं।

+2

यह उत्तर समझना मुश्किल है (उदाहरण के लिए, मुझे दूसरे भाग से आपका मतलब क्या है) और या तो मौजूदा उत्तरों (2014 से) से जानकारी दोहराता है या (यदि शाब्दिक रूप से लिया जाता है) गलत है (ओपी के कोड में शामिल है) नहीं 'my_list' चर)। – melpomene

संबंधित मुद्दे