Domanda

In Python Shell, sono entrato:

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

e ho

a  
b  
c  
d  

Ma quando ho provato:

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

e ho

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

Qualcuno sa cosa sta succedendo? Come posso risolverlo/aggirarlo?

È stato utile?

Soluzione

list.append è un metodo che modifica l'elenco esistente. Non restituisce un nuovo elenco: restituisce None, come la maggior parte dei metodi che modificano l'elenco. Basta fare aList.append('e') E la tua lista riceverà l'elemento.

Altri suggerimenti

In generale, quello che vuoi è la risposta accettata. Ma se si desidera il comportamento di sovrascrivere il valore e creare un nuovo elenco (che è ragionevole in alcuni casi^), ciò che potresti fare è invece usare "operatore Splat", noto anche come elenco di disimballare:

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

Oppure, se è necessario supportare Python 2, usa il + operatore:

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

^ Ci sono molti casi in cui si desidera evitare gli effetti collaterali della mutazione .append(). Per uno, immagina di voler aggiungere qualcosa a un elenco che hai preso come argomento di funzione. Chiunque stia usando la funzione probabilmente non si aspetta che l'elenco fornito venga modificato. L'uso di qualcosa del genere mantiene la tua funzione "puro" senza "effetti collaterali".

Elimina la tua seconda riga aList = aList.append('e') e usa solo aList.append("e"), questo dovrebbe sbarazzarsi di questo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top