Python - Как я могу вызвать содержимое переменной вместо ее имени, используя метод .format ()? - PullRequest
2 голосов
/ 30 октября 2019

Я пытаюсь сделать матрицу из этих списков:

list_1 = [0, 1, 2]
list_2 = ["3", "4", "5"]
list_3 = [6.0, 7.0, 8.0]
matrix = []

Я использую приведенный ниже код, но он возвращает ошибку, потому что он принимает «list_1» в качестве строки вместоимя переменной: ValueError: invalid literal for int() with base 10: 'list_1'

for i in range(3):
    matrix.append([])
    for j in range(1,4):
        matrix[i].append(int('list_{0}'.format(j))[i])

Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 30 октября 2019

Попробуйте использовать метод eval() вместе с добавлением метода str() для получения имени переменной.

Заменить эту строку

matrix[i].append(int('list_{0}'.format(j))[i])

на эту строку:

matrix[i].append(int(eval('list_'+str(j))[i]))

Вывод print(matrix):

[[0, 3, 6], [1, 4, 7], [2, 5, 8]]
0 голосов
/ 30 октября 2019

Теперь, когда я знаю, чего хочет пользователь, это простая версия с одним вкладышем.

list_1 = [0, 1, 2]
list_2 = ["3", "4", "5"]
list_3 = [6.0, 7.0, 8.0]


matrix=[[int(x) for x in list_1],[int(x) for x in list_2],[int(x) for x in list_3]]
0 голосов
/ 30 октября 2019

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

Вы можете получить объект модуля через словарь sys.modules. (Документы, кажется, предлагают использовать это только для чтения.) Ключ - это имя модуля, которое удобно хранить в __name__.

Так что следующее работает для меня из командной строки:

>>> import sys
>>> list_1 = [0, 1, 2]
>>> int(getattr(sys.modules[__name__], 'list_1')[0])
0
>>> int(getattr(sys.modules[__name__], 'list_1')[1])
1
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...