Tengo una lista:
list1=[]
la longitud de la lista no está determinada, por lo que estoy tratando de agregar objetos al final de list1 como tal:
for i in range(0, n):
list1=list1.append([i])
Pero mi salida sigue dando este error: AttributeError: el objeto 'NoneType' no tiene atributo 'append'
¿Es esto porque list1 comienza como una lista vacía? ¿Cómo soluciono este error?

Respuestas:
appenden realidad cambia la lista. Además, se necesita un elemento , no una lista. Por lo tanto, todo lo que necesitas esfor i in range(n): list1.append(i)(Por cierto, tenga en cuenta que puede usar
range(n), en este caso).Supongo que su uso real es más complicado, pero es posible que pueda usar una lista de comprensión, que es más pitónica para esto:
list1 = [i for i in range(n)]O, en este caso, en Python 2.x
range(n)de hecho crea la lista que ya desea, aunque en Python 3.x, necesitalist(range(n)).fuente
appendagrega a la lista más externa, pero puede agregar a una lista anidada indexándola:a[-1].append(3)agrega3a la última sublista dea.No necesita el operador de asignación. añadir devuelve Ninguno.
fuente
appenddevuelve None, por lo que en la segunda iteración está llamando al métodoappendde NoneType. Simplemente elimine la asignación:for i in range(0, n): list1.append([i])fuente
Mikola tiene la respuesta correcta pero un poco más de explicación. Se ejecutará la primera vez, pero debido a que append devuelve
None, después de la primera iteración del ciclo for, su asignación harálist1que sea igualNoney, por lo tanto, el error se lanzará en la segunda iteración.fuente
Personalmente prefiero al
+operador queappend:for i in range(0, n): list1 += [[i]]Pero esto crea una nueva lista cada vez, por lo que podría no ser la mejor si el rendimiento es fundamental.
fuente
Tenga en cuenta que también puede usar insertar para colocar el número en la posición requerida dentro de la lista:
initList = [1,2,3,4,5] initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]Y también tenga en cuenta que en Python siempre puede obtener una longitud de lista usando el método len ()
fuente
Como dijo Mikola,
append()devuelve un vacío, por lo que cada iteración que estableces list1 en nonetype porque append devuelve nonetype. En la siguiente iteración, list1 es nulo, por lo que está intentando llamar al método append de un nulo. Los nulos no tienen métodos, de ahí su error.fuente
use my_list.append (...) y no use y otra lista para agregar ya que la lista es mutable.
fuente
my_listvariable).