Пожалуйста, рассмотрите следующий код:
i = [1, 2, 3, 5, 8, 13]
j = []
k = 0
for l in i:
j[k] = l
k += 1
print j
Вывод (Python 2.6.6 на Win 7 32-разрядная версия):
> Traceback (most recent call last):
> j[k] = l IndexError: list assignment index out of range
Я думаю, это что-то простое, я не понимаю. Может кто-нибудь прояснить это?
append
это правильное решение для вашего случая использования, однако в списке Python есть метод вставки, который можно вставить непосредственно в i-ую позицию в списке.j.insert(k, l)
Ответы:
j
пустой список, но вы пытаетесь записать элемент[0]
в первой итерации, которой еще нет.Вместо этого попробуйте следующее, чтобы добавить новый элемент в конец списка:
Конечно, вы никогда бы не сделали это на практике, если бы все, что вы хотели сделать, это скопировать существующий список. Вы бы просто сделали:
В качестве альтернативы, если вы хотите использовать список Python как массив в других языках, вы можете предварительно создать список с его элементами, для которых установлено нулевое значение (
None
в приведенном ниже примере), а затем перезаписать значения в определенных позициях:Необходимо понимать, что
list
объект не позволит вам присвоить значение отсутствующему индексу.источник
Другой вариант - инициализировать
j
:источник
Делай
j.append(l)
вместоj[k] = l
иk
вообще избегай.источник
j+=[l]
.append
гораздо более распространено (возможно, по причине - я думаю, что это немного легче понять), не очень хорошо в любом случае. (Изменить @khachik: Нет,+=
изменяет на месте)Вы также можете использовать понимание списка:
или сделайте копию этого, используя утверждение:
источник
Также избегайте использования строчных букв "L", потому что их легко спутать с 1
источник
Я думаю, что вставка метода Python - это то, что вы ищете:
Вставляет элемент x в положение i. list.insert (я, х)
источник
insert
когдаappend
был предоставлен специально для этой цели.[1, 20, 2, 3, 4, 5]
.Вы можете использовать словарь (аналог ассоциативного массива) для j
напечатает:
источник
Еще один способ:
В этом случае
j
будет массив NumPyисточник
Может быть, вам нужно расширить ()
источник