Por favor, considere o seguinte código:
i = [1, 2, 3, 5, 8, 13]
j = []
k = 0
for l in i:
j[k] = l
k += 1
print j
A saída (Python 2.6.6 no Win 7 de 32 bits) é:
> Traceback (most recent call last):
> j[k] = l IndexError: list assignment index out of range
Eu acho que é algo simples que eu não entendo. Alguém pode esclarecer isso?
append
é a solução certa para o seu caso de uso, no entanto, existe um método de inserção na lista python que pode ser inserido diretamente na i-ésima posição na lista.j.insert(k, l)
Respostas:
j
é uma lista vazia, mas você está tentando gravar no elemento[0]
na primeira iteração, que ainda não existe.Tente o seguinte, para adicionar um novo elemento ao final da lista:
Obviamente, você nunca faria isso na prática se tudo que você queria fazer era copiar uma lista existente. Você apenas faria:
Como alternativa, se você quiser usar a lista Python como uma matriz em outros idiomas, poderá pré-criar uma lista com seus elementos configurados para um valor nulo (
None
no exemplo abaixo) e, posteriormente, substituir os valores em posições específicas:A única coisa a perceber é que um
list
objeto não permitirá que você atribua um valor a um índice que não existe.fonte
Sua outra opção é inicializar
j
:fonte
Faça ao
j.append(l)
invés dej[k] = l
e evitek
.fonte
j+=[l]
.append
é muito mais comum (talvez por uma razão - acho que é um pouco mais fácil de entender), não muito superior de qualquer maneira. (Edit @khachik: Não,+=
modifica no local)Você também pode usar uma compreensão de lista:
ou faça uma cópia usando a instrução:
fonte
Evite também usar "L" minúsculo, pois é fácil confundi-lo com 1's
fonte
Eu acho que a inserção do método Python é o que você está procurando:
Insere o elemento x na posição i. list.insert (i, x)
fonte
insert
quandoappend
foi fornecido especificamente para esse fim.[1, 20, 2, 3, 4, 5]
.Você poderia usar um dicionário (semelhante a uma matriz associativa) para j
irá imprimir:
fonte
Mais uma maneira:
Nesse caso
j
, haverá uma matriz numpyfonte
Talvez você precise estender ()
fonte