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:
append
en 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
append
agrega a la lista más externa, pero puede agregar a una lista anidada indexándola:a[-1].append(3)
agrega3
a la última sublista dea
.No necesita el operador de asignación. añadir devuelve Ninguno.
fuente
append
devuelve None, por lo que en la segunda iteración está llamando al métodoappend
de 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álist1
que sea igualNone
y, 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_list
variable).