Python如何实现条件计数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (619)

我试图计算列表中等于某个值的元素的数量。问题是这些元素不是内置类型。所以如果我有

class A:
    def __init__(self, a, b):
        self.a = a
        self.b = b

stuff = []
for i in range(1,10):
    stuff.append(A(i/2, i%2))

现在,我想数一下b=1的元素数量。我想出了两个方法:

print [e.b for e in stuff].count(1)

print len([e for e in stuff if e.b == 1])

哪种方法最好?还有更好的选择吗?

提问于
用户回答回答于
用户回答回答于
sum(x.b == 1 for x in L)

这是最简单的代码,但可能不是最快的。

$ py26 -mtimeit -s'L=[1,2,1,3,1]*100' 'len([x for x in L if x==1])'
10000 loops, best of 3: 56.6 usec per loop
$ py26 -mtimeit -s'L=[1,2,1,3,1]*100' 'sum(x==1 for x in L)'
10000 loops, best of 3: 87.7 usec per loop

因此,在这种情况下,生成额外的临时列表并检查其长度会造成“内存浪费”。

扫码关注云+社区

领取腾讯云代金券