如何计算iterable中的非空元素?

2024-03-28 23:15:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为下面的代码片段寻找一个更好/更像Python的解决方案

count = sum(1 for e in iterable if e)

Tags: 代码inforifcount解决方案iterablesum
3条回答

大多数Pythonic是编写一个小的辅助函数,并将其放入您信任的“实用程序”模块(或适当包的子模块,如果您有足够的;-):

import itertools as it

def count(iterable):
  """Return number of items in iterable."""
  return sum(1 for _ in iterable)

def count_conditional(iterable, predicate=None):
  """Return number of items in iterable that satisfy the predicate."""
  return count(it.ifilter(predicate, iterable))

实际上,选择如何实现这些实用程序并不重要(您可以随时选择在Cython中重新编码其中的一些实用程序,例如,如果使用这些实用程序对应用程序进行的某些分析显示它是有用的):关键是将它们作为自己有用的实用程序库,有了名字和调用模式,你就可以像以前一样,让你最重要的应用程序级代码更清晰、可读性更强、更简洁,如果你把它塞满了内联的扭曲!-)

老实说,我想不出比你更好的办法了。

好吧,我想人们可能会争论“更好”,但我认为你不太可能找到更简短、更简单、更清晰的东西。

len(filter(None, iterable))

使用None作为filter的谓词只表示使用项的真实性。(也许更清晰的是len(filter(bool, iterable))

相关问题 更多 >