Pregunta

En Python Shell, entré:

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

y consiguió

a  
b  
c  
d  

Pero cuando lo intenté:

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

y consiguió

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

¿Alguien sabe lo que está pasando? ¿Cómo puedo solucionarlo/evitarlo?

¿Fue útil?

Solución

list.append es un método que modifica la lista existente. No devuelve una nueva lista, devuelve None, como la mayoría de los métodos que modifican la lista. Simplemente hacer aList.append('e') y su lista obtendrá el elemento adjunto.

Otros consejos

En general, lo que quieres es la respuesta aceptada. Pero si desea el comportamiento de anular el valor y crear una nueva lista (que es razonable en algunos casos^), lo que podría hacer es usar el "Operador de Splat", también conocido como Desempacado de la lista:

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

O, si necesita apoyar a Python 2, use el + operador:

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

^ Hay muchos casos en los que desea evitar los efectos secundarios de la mutación con .append(). Por un lado, imagine que desea agregar algo a una lista que haya tomado como argumento de función. Quien esté utilizando la función probablemente no espere que la lista que proporcionaron se cambiará. Usar algo como esto mantiene tu función "puro" sin que "efectos secundarios".

Elimina tu segunda línea aList = aList.append('e') y usa solo aList.append("e"), esto debería deshacerse de ese problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top