【问题标题】:Adding up instance variables of a class object添加类对象的实例变量
【发布时间】:2013-09-05 00:42:43
【问题描述】:

我想在一个类对象的列表中总结一个类对象的实例变量。

Class A(object):

    def __init__(self):
        self.a = 20

B = []
for i in range(10):
    B.append(A())

# Can this be made more pythonic?
sum = 0 
for i in B:
    sum += i.a

我正在考虑使用地图功能或其他东西?不知道这样是不是太过分了。只是好奇。

【问题讨论】:

  • sum(i.a for i in B)(参见:list comprehensionsgenerator expressions 的教程。)
  • (尽管我不喜欢滥用“pythonic”这个词,但我认为列表推导显然比map()filter() 更重要。)
  • @millimoose..这实际上给了我一个 TypeError 说 'int' object is not callable
  • @Nitin 这可能是因为您的脚本中仍有sum = 0。这说明了为什么将变量命名为 sum 是不好的。
  • @Nitin 错误不在我的建议中:ideone.com/Dx7v2Isum() 是其中的内置函数,而不是您的变量。)

标签: python


【解决方案1】:
class A(object):

def __init__(self):
    self.a = 20

B = []
for i in range(10):
    B.append(A())

s = sum(i.a for i in B)

print s

有效。

【讨论】:

    【解决方案2】:

    您可以使用reduce

    reduce(lambda acc, c: acc + c, [i.a for i in B])
    

    sum() 理解

    sum([i.a for i in B])
    

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多