在Python中使用循环命名变量

22

我该如何使用循环命名变量?例如,如果我想要一个变量double_1 = 2double_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

显然,这样做不起作用,但是实现循环数字到变量名的正确语法是什么?我已经有一段时间没有编码了,但我记得有一种方法可以做到这一点。


3
使用字典正是它们被创建的原因。 - Inbar Rose
1
这个回答解决了你的问题吗?如何创建可变变量? - mkrieger1
5个回答

47

使用字典代替。例如:

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

不过,绝对没有做这件事的理由——因为您应该使用词典!


1
+1,但是“如果你非常必须这样做”的话,他很可能不会这样做,因此永远不应该这样做。 - phant0m
像这样分配本地变量非常危险。真的应该避免。你应该链接一些关于它的信息或更严格的警告。 - Inbar Rose
1
文档建议避免修改它。docs - martineau

7

拓展我的评论:“使用字典。这正是它们被创建的原因”

使用defaultdict:

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

使用普通字典:

>>> 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

没有特别的原因,他想要整数,我猜你不需要那部分内容...但我喜欢它们 :P - Inbar Rose
3
如果我尝试访问不存在的内容,我宁愿得到一个异常。 - phant0m

6

虽然我怀疑您真的需要做您想做的事情,但这里有一种方法:

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

print double_1
print double_2
   ...
print double_12

globals() 返回一个字典,表示当前全局符号表(即当前模块的字典)。可以看出,可以向其中添加任意条目。


2

如前所述,您应该使用字典。以下是一种简单易用的方式来创建一个满足您要求的字典。

>>> {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}

1

如果字典符合您的要求,您可以使用它。但我希望它能对您有所帮助。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接