2016-12-05 4 views
1

У меня есть матрица 2D под названием A0Создать цикл для набора подобных заявлений в питоне

A0 = [[0 for x in range(3)] for y in range(3)] 

У меня есть функция под названием newProb, которая принимает в качестве аргумента и возвращает другую 2D матрицу следующим образом: -

A1 = newProb(A0) 

Итак, я хочу поместить этот код в цикл.

A1 = newProb(A0) 
A2 = newProb(A1) 
A3 = newProb(A2) 
A4 = newProb(A3) 

Любая помощь будет оценена по достоинству. Благодаря!

P.S. Я должен сделать 100 звонков в эту функцию указанным выше способом

+0

Возможный дубликат [генерации имен переменных на лету в python] (http://stackoverflow.com/questions/4010840/generating-variable-names-on-fly-in-python) –

+0

Почему бы просто не создать список, добавить результат каждого вызова в список, а затем на следующая итерация использует предыдущее значение списка? Или вы можете использовать рекурсию. – SteveJ

+0

@SteveJ. да, я попробую это. Спасибо –

ответ

0

Используйте dict:

A = {} 
A[0] = [[0 for x in range(3)] for y in range(3)] 
for i in range(1, 101): 
    A[i] = newProb(A[i-1]) 
1

Вместо того, чтобы пытаться создать локальные переменные в цикле, вы бы лучше хранить результаты в список. Индекс вашего списка будет хорошо сочетаться с вашим соглашением об именах.

A = [] 

A.append([[0 for x in range(3)] for y in range(3)]) 

A[1] = newProb(A[0]) 
A[2] = newProb(A[1]) 
# ... 

Вы можете легко поместить это в петлю с range.

# start the range off by 1 
for i in range(1, 10): 
    A[i] = newProb(A[i - 1]) 

Это также может быть записана в виде

for i in range(10): 
    A.append(newProb(A[i])) 
+1

'A [1]' даст вам 'IndexError', если элементы' A' не выделены заранее. Используйте '.append()' вместо – jez

+0

Вы имеете в виду A [0] вместо A0 во второй строке? –

+0

Я понял. Я исправил логику, смещая диапазон на 1. – Soviut

0

Вы можете хранить значения в списке генерируется следующим образом:

A = [A0] 
for i in range(99): 
    A.append(newProb(A[i])) 
0

Объединяя ответы от @jez и @Soviut:

A = [] 
A.append([[0 for x in range(3)] for y in range(3)]) 

for i in range(100): 
    A.append(newProb(A[-1]) 

A[-1] - последний элемент в списке.

0

Если вам просто нужно «окончательное» значение, после 100st цикла:

value = [[0 for x in range(3)] for y in range(3)] 
for i in range(100): 
    value = newProb(value) 
+0

нет, мне нужны все значения! –

0

закруглить ответы с петлей в то время как

A = [A0] 
while len(A) < 100: 
    A.append(newProb(A[-1])) 
Смежные вопросы