Python 计数低于阈值的列表值的最快方法
是否有列表方法等效于numpy.count\u非零(lstPython 计数低于阈值的列表值的最快方法,python,performance,list,count,Python,Performance,List,Count,是否有列表方法等效于numpy.count\u非零(lst
n = iterlen( x for x in lst if x < t )
n=iterlen(如果x
这比列表理解更好,因为你不需要构建临时列表(你使用len),它会占用时间和内存
根据问题的细节(列表大小、元素类型),转换为numpy数组可能会更快。你应该对两种方法都计时,看看哪一种最适合你
当然,如果可能的话,最好的解决方案是首先将列表表示为numpy数组。如果这样做,numpy.count\u nonzero(lst
几乎肯定是最快的
或者,如果您可以首先构建一个排序列表,那么您可以使用实现一个
count\u less
函数。这里的复杂度是O(logN),这对于大型列表来说是最快的。c将是列表(lst)中低于t值的所有项目的计数:
c = len([i for i in lst if i < t])
c=len(如果i
您可以使用此软件包:
用法:
>>> import cardinality
>>> cardinality.count(i for i in range(500) if i > 499)
1
实际的count()实现如下所示:
def count(iterable):
if hasattr(iterable, '__len__'):
return len(iterable)
d = collections.deque(enumerate(iterable, 1), maxlen=1)
return d[0][0] if d else 0
如果
lst
是4GB怎么办?然后按照另一个人的答案去做。我甚至投了赞成票。顺便说一句,这仍然适用于4场演出;只会慢一点。