【问题标题】:Using a loop in Python to name variables在 Python 中使用循环来命名变量
【发布时间】:2012-11-28 10:45:53
【问题描述】:

如何使用循环来命名变量?比如我想有一个变量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

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

【问题讨论】:

标签: python variables for-loop


【解决方案1】:

改用字典。例如:

doubles = dict()

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

或者如果你绝对 必须这样做AND ONLY IF YOU FULLY UNDERSTAND WHAT YOU ARE DOING,你可以分配给locals()作为字典:

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

从来没有应该是这样做的理由 - 因为你应该改用字典!

【讨论】:

  • +1,但Or if you absolutely must do this 他可能没有,因此也不应该这样做。
  • 这样分配给当地人是非常危险的。真的应该避免。您应该链接一些有关它的信息或更严格的警告。
  • docs 说要避免修改它。
【解决方案2】:

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

使用默认字典:

>>> 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
  • ;) 如果我尝试访问不存在的东西,我宁愿有一个例外。
【解决方案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】:

    如前所述,您应该使用字典。这是一种创建满足您要求的简单方法。

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

    【讨论】:

      【解决方案5】:

      您可以在 dict 不符合您的要求时使用它。不过希望对你有帮助。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 2021-08-26
        • 2015-06-09
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多