编程语言
首页 > 编程语言> > python-最短的计数方法?

python-最短的计数方法?

作者:互联网

假设我有一个MyClass列表.我想计算MyClass.SomeProperty设置为True的元素的数量(假设SomeProperty是一个布尔值,始终为True或False).我担心的是:

>它应该运行得很快
>代码不应混淆阅读
>它适用于任何情况(不仅是布尔值)

我知道我可以做:

count = len([e for e in MyList if e.SomeProperty])  # For non booleans, something like e.SomeProperty == MyValue

但这似乎效率很低.

>为什么要为e输入诸如e之类的毫无意义的东西?
>为什么只想计算整个清单,为什么要创建整个清单?

有可能做得更好吗?

解决方法:

您可以将sum与生成器表达式一起使用.

count = sum( e.SomeProperty for e in MyList )

或对于一般谓词p:

count = sum( p(e) for e in MyList )

这利用了可以将True和False用作整数1和0的事实,并且使用了生成器这一事实将阻止创建新列表.

如果您坚持要部分避免使用for,则可以使用map和attrgetter

import opertor
count = sum(map(operator.attrgetter('SomeProperty'), MyList))

或对于一般谓词p:

count = sum(map(p, MyList))

但是,这不是pythonic.我建议第一种方法.

标签:count,python,list-comprehension
来源: https://codeday.me/bug/20191028/1952708.html