2010-10-01 11 views
13

को मेरी सूची में बदल जाता है, जो मैंने दर्ज:जोड़कर अजगर शैल में NoneType

aList = ['a', 'b', 'c', 'd'] 
for i in aList: 
    print(i) 

और

a 
b 
c 
d 

मिला लेकिन जब मैं करने की कोशिश की:

aList = ['a', 'b', 'c', 'd'] 
aList = aList.append('e') 
for i in aList: 
    print(i) 

और

Traceback (most recent call last): 
    File "<pyshell#22>", line 1, in <module> 
    for i in aList: 
TypeError: 'NoneType' object is not iterable 
मिला

क्या किसी को पता है कि क्या हो रहा है? मैं इसे कैसे ठीक कर सकता/सकती हूं?

उत्तर

25

list.append एक ऐसी विधि है जो मौजूदा सूची को संशोधित करती है। यह एक नई सूची नहीं लौटाता है - यह None देता है, जैसे सूची को संशोधित करने वाली अधिकांश विधियों की तरह। बस aList.append('e') करें और आपकी सूची तत्व को संलग्न कर देगा।

+0

और चूंकि यह कुछ भी वापस नहीं करता है, तो आप असाइनमेंट करते समय कोई भी सूची सेट नहीं कर रहे हैं, यही कारण है कि आपको त्रुटि मिल रही है। – kindall

+0

सभी फ़ंक्शंस कुछ लौटाते हैं :) –

+1

सच - लेकिन कभी-कभी * कुछ * 'none' है। लेकिन वास्तव में कुछ नहीं 'कोई नहीं' है? मेरे सर में दर्द है! –

2

अपनी दूसरी पंक्ति aList = aList.append('e') हटाएं और केवल aList.append("e") का उपयोग करें, इसे उस समस्या से छुटकारा पाना चाहिए।

0

आम तौर पर, जो आप चाहते हैं वह स्वीकृत उत्तर है।

aList = [*aList, 'e'] 
#: ['a', 'b', 'c', 'd', 'e'] 
: लेकिन अगर आप मूल्य अधिभावी और एक नई सूची (जो कुछ मामलों^में उचित है) बनाने के व्यवहार चाहते हैं, क्या आप के बजाय कर सकता है "सूचक ऑपरेटर", भी सूची unpacking के रूप में जाना का उपयोग करें

या, यदि आप अजगर 2 का समर्थन करने की जरूरत है, + ऑपरेटर का उपयोग करें:

aList = aList + ['e'] 
#: ['a', 'b', 'c', 'd', 'e'] 

^कई मामलों जहां .append() साथ परिवर्तनशील के दुष्प्रभाव से बचने के लिए चाहते हैं। एक के लिए, कल्पना करें कि आप किसी फ़ंक्शन तर्क के रूप में ली गई सूची में कुछ जोड़ना चाहते हैं। जो कोई भी फ़ंक्शन का उपयोग कर रहा है, वह उम्मीद नहीं करता है कि उनके द्वारा प्रदान की गई सूची को बदला जा रहा है। इस तरह का उपयोग करने से "side effects" के बिना आपके फ़ंक्शन को "pure" रखता है।

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