Есть ли способ ссылаться на несколько переменных для условного в Python? - PullRequest
0 голосов
/ 17 апреля 2020

Например, если случай выглядит примерно так:

distance_11 = 5
distance_12 = 3
distance_13 = 2

if distance_* == 3:
    distance_* = [1,2,3] 

Я знаю, что код явно неправильный, но я пытаюсь показать, что я пытаюсь сделать. Поиск набора переменных с похожими именами, а затем, если кто-то соответствует этому условию, назначить его указанному массиву. Я знаю, что мог бы технически написать условие elif для каждой указанной c переменной, но в конкретном случае использования есть намного больше переменных. Буду признателен за любую помощь, спасибо.

Ответы [ 4 ]

3 голосов
/ 17 апреля 2020

Вы должны сделать расстояния в списке или массиве так:

distances = [5, 3, 2]

for (i, val) in enumerate(distances):
    if val == 3:
        distances[i] = [1, 2, 3]
0 голосов
/ 17 апреля 2020

Вы обязательно должны использовать массив как @ Eri c M, упомянутый . Но если вы не можете изменить имена переменных, вы можете использовать встроенную Python globals.

from fnmatch import filter    

distance_11 = 5
distance_12 = 3
distance_13 = 2

for var_name in filter(globals().keys(), 'distance_*'):
    if globals()[var_name] == 3:
        globals()[var_name] = [1, 2, 3]

Если переменные distance_* не являются глобальными, также посмотрите на locals() встроенный

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

Я думаю, что вы ищете такое решение.

distance_11 = 5
distance_12 = 3
distance_13 = 2
dists = [distance_11, distance_12, distance_13]

for i in range(len(dists)):
    if dists[i] == 3:
        dists[i] = [1, 2, 3]
0 голосов
/ 17 апреля 2020

Вы можете использовать vars для достижения этого

distance_11 = 5
distance_12 = 3
distance_13 = 2

for i in range(11, 14):
    varName = f'distance_{i}'
    if vars()[varName] == 3:
        vars()[varName] = [1,2,3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...