2014-11-10 3 views
0

Я пытаюсь создать имена динамических переменных как часть цикла и назначить соответствующие значения. Для того, чтобы более ясно, что я после того, как я создал этот демонстрационный код демонстрирует:Динамическое присвоение имен переменных?

var1 = ["one","two","three"] 
var2 = ["red","blue","green"] 

for i in 0 to 2: 
    var3 = var1[i] #cycle through first list 
    var4 = var2[i] #cycle through second list 

    var5 = var3,var4 #make the name of var5 a concatenation of var 3 and var 4 

    var5 = 1 #assign this dynamic variable name an arbitary value 

print var5 

бит, который я просто не знаю, как подойти является линией var5 = var3,var4. Я даже не уверен, что это лучший способ подойти к проблеме. Может кто-то пожалуйста:

1) Заполните пустые строки, указанных выше 2) Предложить альтернативный синтаксис вообще

Причины мне нужно динамические имена переменных в моем реальном коде я использую для петель, где каждый номер в петле применяются различные условия. Извиняюсь, если я немного сработал с моей методологией.

EDIT:

ответы у меня было предположить, я не сформулировали, что я требую четко. Мой выход образец должен быть в формате:

one_red = 1 
two_blue = 1 
three_green = 1 

Причина, почему я требую, чтобы они имеют разные имена переменных является то, что я в конечном итоге присоединиться мои выходы вместе. Таким образом, мой окончательный вывод будет:

111 

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

Благодаря

+4

Динамическое присвоение переменных, подобных этому, почти никогда не является тем, что вы хотите. Вместо этого используйте список или словарь (в зависимости от того, что более подходит). –

+2

Вместо сохранения динамических имен переменных используйте словарь. См. [Сохранить данные из ваших имен переменных] (http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html) –

+0

Ваш отредактированный вопрос не дает никакой причины, почему эти значения должны быть в отдельных переменных. Объединение этих значений намного проще, если они хранятся в одной и той же структуре данных, чем если они хранятся во всем локальном пространстве имен. Если вы объясните, как вы присоединяетесь к этим значениям, я могу показать, почему это проще со словарем. (См. Ссылку в моем комментарии выше, а также [Почему вы не хотите динамически создавать переменные] (http://stupidpythonideas.blogspot.com/2013/05/why-you-dont-want-to-dynamically -create.html)). –

ответ

2

Используйте словарь вместо динамического присвоения имен переменных. Кроме того, вы можете сократить линии var3 и var4, используя zip - см. Is there a better way to iterate over two lists, getting one element from each list for each iteration?.

В этот момент, ваш код будет выглядеть примерно так:

var1 = ["one","two","three"] 
var2 = ["red","blue","green"] 

d = {} 
for var3, var4 in zip(var1, var2): 
    d[var3 + var4] = 1 

print d 
# {'twoblue': 1, 'threegreen': 1, 'onered': 1} 
+0

Привет, спасибо, что ответили. Пожалуйста, см. Мой измененный вопрос, поскольку я не думаю, что я был очень ясен о том, о чем я просил. – gdogg371

0

Я хотел бы использовать словарь или что-то другое, а не пытаться создавать переменные по имени. Объединяем из каждого списка:

>>> names = [''.join(i) for i in zip(var1, var2)] 
>>> names 
['onered', 'twoblue', 'threegreen'] 

Затем вы можете сделать свой словарь, чтобы посмотреть вещи, например

>>> {name : index for index, name in enumerate(names)} 
{'twoblue': 1, 'onered': 0, 'threegreen': 2} 
+0

Привет, спасибо, что ответили. Пожалуйста, см. Мой измененный вопрос, поскольку я не думаю, что я был очень ясен о том, о чем я просил. – gdogg371

0

var5 = var3,var4 #make the name of var5 a concatenation of var 3 and var 4

Будьте осторожны, что эта строка присваивает var5 значению кортеж (var3, var4). Он не объединяет две строки.

Как указал Дэвид Робинсон и другие, используйте словарь. Я просто подумал, что буду отмечать проблему конкатенации.

+0

Привет, спасибо, что ответили. Пожалуйста, см. Мой измененный вопрос, поскольку я не думаю, что я был очень ясен о том, о чем я просил. – gdogg371

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