Por favor considere el siguiente código:
i = [1, 2, 3, 5, 8, 13]
j = []
k = 0
for l in i:
j[k] = l
k += 1
print j
El resultado (Python 2.6.6 en Win 7 de 32 bits) es:
> Traceback (most recent call last):
> j[k] = l IndexError: list assignment index out of range
Supongo que es algo simple que no entiendo. ¿Alguien puede aclararlo?
append
es la solución adecuada para su caso de uso, sin embargo, hay un método de inserción en la lista de Python que puede insertarse directamente en la i-ésima posición en la lista.j.insert(k, l)
Respuestas:
j
es una lista vacía, pero está intentando escribir en el elemento[0]
en la primera iteración, que aún no existe.En su lugar, intente lo siguiente para agregar un nuevo elemento al final de la lista:
Por supuesto, nunca haría esto en la práctica si todo lo que quisiera hacer fuera copiar una lista existente. Simplemente harías:
Alternativamente, si desea utilizar la lista de Python como una matriz en otros idiomas, puede crear previamente una lista con sus elementos establecidos en un valor nulo (
None
en el ejemplo a continuación), y luego, sobrescribir los valores en posiciones específicas:Lo que debe darse cuenta es que un
list
objeto no le permitirá asignar un valor a un índice que no existe.fuente
Su otra opción es inicializar
j
:fuente
Hacer en
j.append(l)
lugar dej[k] = l
y evitark
en absoluto.fuente
j+=[l]
.append
es mucho más común (quizás por una razón, creo que es un poco más fácil de comprender), no realmente superior de cualquier manera. (Editar @ khachik: No,+=
modifica en el lugar)También podría usar una lista de comprensión:
o haga una copia usando la declaración:
fuente
También evite usar "L" en minúsculas porque es fácil confundirlas con 1
fuente
Creo que el método de inserción de Python es lo que estás buscando:
Inserta el elemento x en la posición i. list.insert (i, x)
fuente
insert
cuándoappend
se proporcionó específicamente para este propósito.[1, 20, 2, 3, 4, 5]
.Podría usar un diccionario (similar a una matriz asociativa) para j
imprimirá:
fuente
Una forma más:
En este caso
j
será una matriz numpyfuente
Quizás necesites extender ()
fuente