gpt4 book ai didi

python - 最短的计数方式?

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:53 25 4
gpt4 key购买 nike

假设我有一个 MyClass 列表。我想计算将 MyClass.SomeProperty 设置为 True 的元素的数量(假设 SomeProperty 是一个始终为 True 的 bool 值False)。我的顾虑是:

  • 它应该运行得很快
  • 代码不应该让人难以阅读
  • 它应该适用于任何类型的条件(不仅仅是 bool 值)

我知道我能做到:

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

但似乎效率不高。

  • 为什么要输入像 e for e 这样毫无意义的东西?
  • 如果您只想计算它们,为什么还要创建一个完整的列表?

有没有可能做得更好?

最佳答案

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

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

或者对于一般谓词 p:

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

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

如果你坚持要避免 for e in 部分,你可以使用 mapattrgetter :

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

或者对于一般谓词 p:

count = sum(map(p, MyList))

但是,这不是 pythonic。我推荐第一种方法。

关于python - 最短的计数方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29582961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com