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