【问题标题】:How to include a variable in another variable如何将一个变量包含在另一个变量中
【发布时间】:2012-03-21 06:55:46
【问题描述】:

我有一组变量:x1x2x3x4x5

x1 = 10
x2 = 20
x3 = 30
x4 = 40
x5 = 50
number=1
for looper in range(0,4):
    xnumber = xnumber + 10
    number = number + 1

获取:x1 = 20x2 = 30 等。 因为我得到了:

"'xnumber' is not defined"

我该如何解决这个问题?

【问题讨论】:

    标签: python arrays python-3.x


    【解决方案1】:

    使用字典。

    >>> d = {'x1':10,'x2':20,'x3':30,'x4':40,'x5':50}
    >>> for key in d:
    ...   d[key] = d[key] + 10
    >>> for key in sorted(d):
    ...   print key, '=', d[key]
    ...
    x1 = 20
    x2 = 30
    x3 = 40
    x4 = 50
    x5 = 60
    

    【讨论】:

      【解决方案2】:

      整数是不可变的。获得所需内容的唯一方法是将每个变量重新分配给一个新整数,并且您必须对每个变量单独执行此操作 - 无法创建循环来执行此操作。

      作为我的意思的一个例子,如果值是可变的,你可以这样做。我已将每个变量更改为包含一个列表而不是一个 int。

      x1=[10]
      x2=[20]
      x3=[30]
      x4=[40]
      x5=[50]
      vars = [x1, x2, x3, x4, x5]
      for looper in range(0,4):
          vars[looper][0] = vars[looper][0] + 10
      print x1,x2,x3,x4,x5
      [20] [30] [40] [50] [50]
      

      请注意,looper 仅上升到 3,因此它错过了 x5

      【讨论】:

      • 这个答案是一个完全不同的问题的正确答案。 :-)
      • @LennartRegebro,我不明白你的意思。问题是如何从一个循环中更新单个变量,我坚持我的回答,你不能不单独使用每个变量。建议用列表替换变量的其他答案正在回避这个问题。
      • @LennartRegebro,看我的编辑。这不是问题的最干净的解决方案,但它证明我的答案不是题外话。
      • 好的,我明白你的意思了。不过,这不是一个很好的答案,根据其他答案,使用列表或字典刚刚解决了问题。
      【解决方案3】:

      最好使用列表:

      x = [10, 2, 30, 40, 50]
      for index, value in enumerate(x):
          x[index] = value + 10
      

      或者一个字典,如果你想要一些“名字”作为你的价值观:

      x = {'x1': 10, 'x2': 2, 'x3': 30, 'x4': 40, 'x5': 50}
      for key, value in x.items():
          x[key] = value + 10
      

      或一个类:

      class x:
          x1 = 10
          x2 = 2
          x3 = 30
          x4 = 40
          x5 = 50
      
      for index in range(1, 6):
          attr_name = 'x%d' % index
          setattr(x, attr_name, getattr(x, attr_name) + 10)
      

      【讨论】:

      • 这太棒了!谢谢。此外,是否有任何可能的方法将一个变量包含到另一个变量中?例如,如果 x1 和 x2 等没有整数值?
      • 是的,list和dict值,class属性可以是任何对象,包括lists和dicts:x = {'first_key': 1, '2': [1,2,[4,5]], 3: {'a': 7}}
      【解决方案4】:

      改用数组,定义x[0] ... x[4] 并将xnumber 替换为x[number]。此外,您可以不定义 number 并使用循环索引:

      x = range(5)
      x[0] = 10
      x[1] = 2
      x[2] = 30
      x[3] = 40
      x[4] = 50
      for i in range(0,5):
          x[i] = x[i] + 10
      

      【讨论】:

        猜你喜欢
        • 2022-01-12
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        相关资源
        最近更新 更多