Это довольно простой вопрос, я много написал на случай, если люди найдут это, отставшие от меня на несколько часов, в разделе «ПОЧЕМУ ЭТО НЕ СРАБОТАЕТ?» поезд, чтобы помочь им
В Matlab следующий код создаст динамически увеличивающийся массив:
for i = 1:5
array(i) = i*2;
end
но у меня есть некоторые проблемы со сложностями в Python. Следующее работает, но это не совсем то, что я хочу:
i = []
array = []
for i in range(1, 5):
array.append(i*2)
Это работает, однако вы можете добавить только в конец. Вы также можете выделить значения для диапазона ячеек, которые уже существуют, помимо простого «вставить их в конец» (т.е. приведенный ниже код, который может заменить ячейки 14-36 в длинном списке из 100 ячеек)
i = []
array = list(xrange(1,100)) #creates list from 1 to 99
for i in range(14, 36):
array[i] = i*2 #assign and overwrite previous cell values
Есть ли здесь какой-то универсальный метод кодирования, который сочетает в себе эти два? Решение для следующего кода:
i = []
array = list(xrange(1,50)) #creates list from 1 to 49
for i in range(34, 66):
array[i] = i*2
Сообщение об ошибке:
IndexError: list assignment index out of range
Общие различия, которые я заметил до сих пор:
- Python начинается с номера ячейки [0], а не [1]
- Вы не можете динамически обновлять размеры списка, поэтому вам нужно использовать функцию добавления
- (Возможно?) необходимо предварительно выделить списки перед их использованием
** Примечание для тех, кто испытывает трудности:
Одна ошибка, которая постоянно появлялась:
TypeError: 'builtin_function_or_method' object does not support item assignment
Это произошло из-за попытки присвоить такое значение:
array.append[i-1] = i*2
См. выше для правильного метода.
Разное
Спасибо за любую помощь! Я уверен, что это действительно просто, но у меня закончились идеи, и я не могу найти решение в предыдущих вопросах!
Другие подобные вопросы, которые либо не решили, либо я не понял: