Frage

In Python Shell trat ich ein:

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

und bekommen

a  
b  
c  
d  

Aber als ich es versuchte:

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

und bekommen

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

Weiß jemand, was los ist? Wie kann ich es reparieren/umgehen?

War es hilfreich?

Lösung

list.append ist eine Methode, die die vorhandene Liste ändert. Es gibt keine neue Liste zurück - sie kehrt zurück None, wie die meisten Methoden, die die Liste ändern. Einfach tun aList.append('e') Und Ihre Liste erhält das Element angehängt.

Andere Tipps

Im Allgemeinen ist die akzeptierte Antwort. Wenn Sie jedoch das Verhalten von Überschreiben des Wertes und der Erstellung einer neuen Liste (in einigen Fällen angemessen) möchten, können Sie stattdessen den "Splat -Operator" verwenden, auch als Listenpackung bezeichnet:

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

Oder wenn Sie Python 2 unterstützen müssen, verwenden Sie die + Operator:

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

^ Es gibt viele Fälle, in denen Sie die Nebenwirkungen der Mutation vermeiden möchten .append(). Stellen Sie sich vor, Sie möchten etwas an eine Liste anhängen, die Sie als Funktionsargument angenommen haben. Wer die Funktion verwendet, erwartet wahrscheinlich nicht, dass die von ihnen bereitgestellte Liste geändert wird. Wenn Sie so etwas verwenden, erhalten Sie Ihre Funktion "rein" ohne "Nebenwirkungen".

Löschen Sie Ihre zweite Zeile aList = aList.append('e') und nur benutzen aList.append("e"), Dies sollte dieses Problem loswerden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top