L'appendimento trasforma il mio elenco in nontipo
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?
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.