【问题标题】:How to rename variables in a loop in Python [duplicate]如何在Python的循环中重命名变量[重复]
【发布时间】:2013-04-10 01:50:22
【问题描述】:

我想在 Python 中运行一个循环多次的程序,每次都创建一个新数组 - 即没有数据被覆盖 - 数组以循环号的引用命名,以便我可以在后续循环中调用它.例如,我可能想在从 0 到 i 的循环中创建数组 x0、x1、x2、...、xi,然后在运行相同变量的另一个循环中调用这些数组中的每一个。 (本质上相当于能够将变量放入字符串中,如'string %d %(x)')。

【问题讨论】:

  • 最好的办法是不要这样做...改用列表(或字典)
  • 您的问题是您使用的是局部变量,而您应该使用列表或字典而不是

标签: python variables loops


【解决方案1】:

您可以为此创建一个对象,然后为此使用setattr 函数。 基本上,它会像这样工作:

setattr(myobject, 'string', value)

和做的一样:myobject.string = value

【讨论】:

    【解决方案2】:

    您可以访问globals() 字典来引入新变量。喜欢:

    for i in range(0,5):
        globals()['x'+str(i)] = i
    

    在这个循环之后你得到

    >>> x0, x1, x2, x3, x4
    (0, 1, 2, 3, 4)
    

    请注意,根据documentation,您不应使用locals() 字典,因为对此的更改可能不会影响解释器使用的值

    【讨论】:

    • 除非它不适用于locals()
    • 是的,我已经更改了答案。虽然它似乎有效,但如果你只引入新变量(之后不要更改它们的值)
    • 请注意阅读此答案的任何人:请不要做这种愚蠢的事情。正确的解决方案是使用字典或列表。
    • 我并没有建议这是做任何事情的好方法。但我相信这是对一个完全有效的原始问题的正确答案。也许您可能想重新阅读关于拒绝投票的 SO 部分...
    • @brunodesthuilliers 在某些情况下修改全局环境可能是有意义的(毕竟globals() dict 的存在可能是有原因的......)什么都不知道更多,你不能说,如果这里是这种情况。
    【解决方案3】:

    依赖变量的名称并更改它们并不是最好的方法。

    正如人们已经在 cmets 中指出的那样,最好使用字典或列表。

    【讨论】:

      【解决方案4】:

      使用字典:

      arraysDict = {}
      for i in range(0,3):
          arraysDict['x{0}'.format(i)] = [1,2,3]
      
      print arraysDict
      # {'x2': [1, 2, 3], 'x0': [1, 2, 3], 'x1': [1, 2, 3]}
      print arraysDict['x1']
      # [1,2,3]
      

      使用列表:

      arraysList = []
      for i in range(0,3):
          arraysList.append([1,2,3])
      
      print arraysList
      # [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
      print arraysList[1]
      # [1, 2, 3]
      

      【讨论】:

        猜你喜欢
        • 2014-06-17
        • 1970-01-01
        • 2021-04-29
        • 1970-01-01
        • 2016-11-13
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        相关资源
        最近更新 更多