Python - Печать массивов с использованием For Loop - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть несколько 2D-массивов с именем temp1, temp2, temp3 ... et c

temp1 = [[7, 2, 4],
         [5, 0, 6],
         [8, 3, 1]] 

temp2 = [[1, 1, 1],
         [1, 1, 1],
         [1, 1, 1]] 

temp3 = [[2, 2, 2],
         [2, 2, 2],
         [2, 2, 2]] 

Я хочу запустить для l oop, который будет возвращает только некоторые массивы в зависимости от диапазона i . Я имею в виду что-то вроде

for i in range(1,3):
    arrayName = ("temp" + str(i))
    print(arrayName)

, где print (arrayName) распечатывает фактический массив вместо строки

Любая помощь приветствуется!

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Вы можете сделать это с exec(). Также ваш range() должен иметь верхнюю границу вашего максимального значения плюс один. Верхняя граница не включена.

for i in range(1, 4):
    exec(f'print(temp{str(i)})')

Вывод:

[[7, 2, 4], [5, 0, 6], [8, 3, 1]]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[2, 2, 2], [2, 2, 2], [2, 2, 2]]
0 голосов
/ 06 апреля 2020

Я заметил, что это ваше требование:

... где print (arrayName) печатает фактический массив вместо строки

Если это так, вы может использовать следующий упрощенный шаблон проектирования:

arrays = [array1, array2, array3]
for array in arrays: 
    print(array)

И, при модификации вашего кода, так что print () будет «печатать фактический массив вместо строки»:

temp1 = [[7, 2, 4],
         [5, 0, 6],
         [8, 3, 1]]

temp2 = [[1, 1, 1],
         [1, 1, 1],
         [1, 1, 1]]

temp3 = [[2, 2, 2],
         [2, 2, 2],
         [2, 2, 2]]

temps = [temp1, temp2, temp3]

for i in temps:
    print(i)

Некоторые дальнейшие мысли:

  1. Я бы избегал методов eval () или exe c () Python, как предлагали другие комментаторы. Возможны более простые решения; у вас нет конкретной причины использовать динамическое выполнение c.

  2. Существует более чистый способ рефакторинга вашего кода, но я предоставляю приведенный выше ответ, который больше отражает вашу структуру кода непосредственно, чтобы избежать путаницы.

0 голосов
/ 06 апреля 2020

Вы можете использовать eval(). Позволяет получить переменную по имени.

for i in range(1, 4):
    current_array = eval(f'temp{i}')
    print(current_array)

Но я советую вам установить эту часть кода в блок try / исключением, поскольку вы можете иметь исключение NameError. И ваш код будет выглядеть так:

for i in range(1, 4):
    variable_name = f"temp{i}"

    try:
        current_array = eval(variable_name)
        print(current_array)
    except NameError:
        print(f"Can not get variable with {variable_name} name")
...