2017-02-19 24 views
0

В настоящее время я изучаю Python (у меня сильный фон в Matlab). Я хотел бы написать цикл в Python, где размер массива увеличивается с каждой итерацией (т. Е. Я могу присвоить новое вычисляемое значение другому индексу переменной). Для этого вопроса я использую очень простой цикл для генерации вектора t = [1 2 3 4 5]. В Matlab, программирование мой желаемый контур будет выглядеть примерно так:Присвоить значения массиву во время цикла - Python

t = []; 
for i = 1:5 
    t(i,1) = i; 
end 

мне удалось достичь того же в Python с помощью следующего кода:

result_t = [] 
for i in range(1,5): 
    t = i 
    result_t.append(t) 

Есть ли более эффективный способ для назначения значения в массив, как мы итерации в Python? Почему невозможно сделать t[i,1] = i (ошибки: индексы индексов должны быть целыми или фрагментами, а не кортежем) или t.append(t) = t (ошибка: 'int' объект не имеет атрибута 'append')?

Наконец, я использовал приведенный выше пример для простоты. Я знаю, что если бы я хотел создать vector [1 2 3 4 5] в Python, то я мог бы использовать функцию «np.arange(1,5,1)»

Заранее за вашу помощь!

-> Мое настоящее намерение состоит не в создании вектора [1 2 3 4 5], а в присвоении вычисленных значений индексу векторной переменной. Например:

result_b = [] 
b = 2 
for i in range(1,5): 
    t = i + b*t 
    result_b.append(t) 

Почему я не могу напрямую писать t.append(t) или использовать индексирование (т.е. t[i] = i + b*t)?

+1

Вы можете использовать диапазон, поскольку он уже возвращает список в python 2. Xrange и в python3 он возвращает итерабельность, которая по-прежнему должна соответствовать вашим потребностям –

ответ

3

Внесение элементов во время цикла с использованием append() является правильным, и это встроенный метод в пределах Python lists.

Однако вы можете иметь один и тот же результат:

Использование списка понимание:

result_t = [k for k in range(1,6)] 
print(result_t) 
>>> [1, 2, 3, 4, 5] 

Использование + оператора:

result_t = [] 
for k in range(1,6): 
    result_t += [k] 

print(result_t) 
>>> [1, 2, 3, 4, 5] 

Используя специальный метод __iadd__:

result_t = [] 
for k in range(1,6): 
    result_t.__iadd__([k]) 

print(result_t) 
>>> [1, 2, 3, 4, 5]