Использование цикла в Python для обозначения переменных

Как использовать цикл для обозначения переменных? Например, если бы я хотел иметь переменную double_1 = 2, double_2 = 4 до double_12 = 24, как бы я ее написал? Я чувствую, что это будет что-то вроде этого:

for x in range(1, 13):
    double_x = x * 2 
    #I want the x in double_x to count up, e.g double_1, double_2, double_3

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

Ответ 1

Вместо этого используйте словарь. Например:

doubles = dict()

for x in range(1, 13):
    doubles[x] = x * 2

Или если вы абсолютно должны это сделать И ТОЛЬКО, ЕСЛИ ВЫ ПОЛНОСТЬЮ ПОНИМАЕТЕ, ЧТО ВЫ ДЕЛАЕТЕ, вы можете назначить locals() для словаря:

>>> for x in range(1, 13):
...     locals()['double_{0}'.format(x)] = x * 2
... 
>>> double_3
6

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

Ответ 2

расширяя мой комментарий: "используйте dict. Именно поэтому они были созданы"

используя defaultdict:

>>> from collections import defaultdict
>>> d = defaultdict(int)

используя обычный dict:

>>> d = {}

отдых:

>>> for x in range(1, 13):
    d['double_%02d' % x] = x * 2


>>> for key, value in sorted(d.items()):
    print key, value


double_01 2
double_02 4
double_03 6
double_04 8
double_05 10
double_06 12
double_07 14
double_08 16
double_09 18
double_10 20
double_11 22
double_12 24

Ответ 3

Хотя я сомневаюсь, что вам действительно нужно делать то, что вы хотите, вот путь:

namespace = globals()
for x in range(1, 13):
    namespace['double_%d' % x] = x * 2

print double_1
print double_2
   ...
print double_12

globals() возвращает словарь, представляющий текущую глобальную таблицу символов (словарь текущего модуля). Как вы можете видеть, можно добавить к нему произвольные записи.

Ответ 4

Вы можете использовать dict, пока он не соответствует вашим требованиям. Но я надеюсь, что это может вам помочь.

var_dic = {}
for x in range(1, 13):
    var_dic["double_%s"% str(x)] = x * 2
print var_dic

Ответ 5

Как уже упоминалось, вы должны использовать dict. Здесь хороший простой способ создать тот, который соответствует вашим требованиям.

>>> {k:k*2 for k in range(1,13)}
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18, 10: 20, 11: 22, 12: 24}