【问题标题】:Python, grouping a large set of variablesPython,对一大组变量进行分组
【发布时间】:2012-08-28 16:04:24
【问题描述】:

我有以下具有不同值的示例脚本,我的实际 xy 列表要大得多:

xy1 = 值1
xy2 = 值2
xy3 = 值3
xy4 = 值4
xy5 = 值5
xy6 = 值6
xy7 = 值7
xy8 = 值8
xy9 = 值9

xytotal = sum((xy1, xy2, xy3, xy4, xy5, xy6, xy7, xy8, xy9))

当我有数千个这样的 xy 变量时,就会出现问题,将它们全部添加到 sum 函数中变得乏味。

现在有没有办法告诉 python 对每个不同的 xy(xy1、xy2、xy3 等)的所有 xy 值求和?

谢谢

【问题讨论】:

  • 你不能把它们都放在一个列表里吗?

标签: python variables sum


【解决方案1】:

不要使用单独的变量。使用列表,如果您的数据足够复杂,可以与其他数据结构混合使用。

当我们这样做时:Variable names aren't data。假设 Python 把你的变量名扔掉了。

【讨论】:

    【解决方案2】:

    回答您的问题,是的,您可以在脚本中声明一堆 xy 变量并将它们相加:

    xy1 = 1
    xy2 = 2
    xy3 = 3
    xy4 = 4
    xy5 = 5
    xy6 = 6
    xy7 = 7
    xy8 = 8
    xy9 = 9
    xy10 = 10
    
    cached = locals()
    xytotal = sum(cached[k] for k in locals() if k.startswith('xy'))
    

    你为什么要这样做...¯\_(ツ)_/¯

    【讨论】:

    【解决方案3】:
    all_xy = [value1, value2, value3, ...]
    # Note that xy_all[n-1] = valuen
    
    xy_total = sum(all_xy)
    

    如果您想使用all_xy[n] = valuen 获取它们,那么您可以使用all_xy = [0, value1, value2, value3, ...]

    在 Python 中使用列表结构绝对比使用变量名更受欢迎,一方面您可以轻松编写列表推导式,例如:

    positive_xy = [ xy for xy in all_xy if xy>0 ]
    positive_xy_total = sum(positive_xy)
    

    另一种选择是使用字典。 .

    如果您在locals() 中检查startswith('xy'),需要注意的另一个原因是您可以轻松尝试对“意外”变量求和,例如一个函数,这会导致 Python 异常。

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多