Я новичок, просто изучаю python и блуждаю, как получить char, который я получаю из цикла for, как имя переменной, а не фактический char
у меня есть 3 массива
a=[1,2,3]
b=[2,3,4]
c=[3,4,5]
и для цикла
for x in "abc":
some_function(x)
например это моя функция...
def some_function(array):
print(sum(array))
но это не работает... я хочу, чтобы x был "a", но не как char, а как переменная a, массив, который плохо дает моей функции и что-то делает






Вместо использования строки используйте все списки в кортеже следующим образом:
for x in (a, b, c):
some_function(x)
Теперь some_function вычисляет сумму каждого списка, поэтому результат выглядит следующим образом:
6
9
12
Если вам нужно продолжать использовать строки, создайте словарь для хранения сопоставлений и используйте его в своем цикле:
d = {'a': [1,2,3], 'b': [2,3,4], 'c': [3,4,5]}
def some_function(array):
print(sum(array))
for x in 'abc':
some_function(d[x])
# 6
# 9
# 12
И кортежи могут быть немного более эффективными?
Спасибо. конечно, это будет работать, но я хочу сделать это строковым способом... я читаю строку из документа, очень длинную, у меня есть уникальные массивы для каждой буквы, и я не хочу писать оператор if для каждой буквы. нет ли способа сделать это без фактического сравнения, а затем отправки через функцию с предварительно назначенными переменными? нужен более простой способ
@TrebledJ, да, итерация кортежа быстрее, чем список (хотя и не с большим отрывом). Строительство — это накладные расходы. Я должен подумать о рефакторинге. Спасибо.
@CleverBot, как было предложено в комментарии к вопросу, вы должны использовать словарь для хранения сопоставления. См. ссылку.
Я обновил свой ответ, чтобы показать, как это можно сделать.
yup dict действительно сработал, большое спасибо
Если вы действительно хотите сделать это с помощью строки "abc", вы можете использовать функцию eval:
for x in "abc":
some_function(eval(x))
Обычный «правильный» способ сделать это — пройтись по (a, b, c), как упоминали другие, но в Python есть множество забавных способов делать что-то.
Важно отметить, что eval опасен и менее рекомендуется.
Да, я согласен, особенно как новичок в Python, вы не должны привыкать использовать его для таких вещей. Хотя в данном конкретном случае это безвредно, потому что ясно, что единственный код, который может быть оценен, — это a, b или c. Похожий, но менее опасный подход: some_function(globals()[x]) предполагая, что a, b и c являются глобальными переменными. globals() просто возвращает словарь глобальных переменных. Измените на locals(), если a, b и c являются локальными переменными в функции.
Если у вас есть большое количество таких переменных, вам действительно следует подумать об использовании dict. См. дубликат, чтобы узнать причины и хорошие предложения.