2013-12-22 3 views
1

Я могу сделать это в C, но я не встретил его в Python.Присвоить значение списку переменных, используя цикл

Скажем, у меня есть несколько переменных:

variable1 = None 
variable2 = None 
variable3 = None 
variable4 = None 
variable5 = None 

и у меня есть список значений [1, 2, 3, 4]

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

variable1 = 1 
variable2 = 2 
variable3 = 3 
variable4 = 4 
variable5 = None 
+2

Почему бы не использовать 'list' вместо этого? –

ответ

2

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

variables = { 
    variable1: None, 
    variable2: None, 
    variable3: None, 
    variable4: None, 
    variable5: None 
} 

values = [1, 2, 3, 4] 

for i, value in enumerate(values): 
    variables['variable' + (i + 1)] = value 

Но, конечно, если все эти переменные дифференцировать это число, вы можете просто использовать список, а также:

# This will create a list with 5 None values, i.e. variables[0] .. variables[4] 
variables = [None] * 5 

for i, value in enumerate(values): 
    variables[i] = value 
+0

Отлично! Спасибо за вашу помощь. – DGDD

1

Вы должны на самом деле рассмотреть вопрос об использовании списка вместо этого, но если вы уверены, что вы делаете, попробуйте:

var1, var2, var3, var4, var5 = my_list + [None]*(5-len(my_list)) 
0

Я бы не рекомендовал делать это, но если вы действительно must, вы можете использовать globals(), чтобы получить словарь определенных переменных и функций, чтобы получить доступ и изменить их.

var1 = var2 = var3 = var4 = var5 = None 
for i, v in enumerate([1, 2, 3, 4]): 
    globals()["var%d" % (i+1)] = v 
print var1, var2, var3, var4, var5 

Но, на самом деле, вы должны достаточно использовать list или dict вместо этого, как было предложено в других ответах.

+1

'globals()' да, хотя, как вы говорите, вы не должны; 'locals()' no. Последнее, как правило, не гарантирует работу, поскольку документы, которые вы связали, объясняют. – DSM

+0

@DSM Спасибо за подсказку, так или иначе я полностью пропустил этот информационный ящик. Отредактировано, чтобы предлагать только 'globals'. –

+0

Спасибо за помощь! – DGDD

Смежные вопросы