Men*_*eni 2 python performance list count
是否有等效于 numpy.count_nonzero(lst < t) 的列表方法?当我在列表 (lst < t) 上使用它时,只返回 True 而不是布尔值列表。我想计算低于某个阈值的列表值,哪个更好 - 转换为 numpy-array,使用排序,某种列表/生成器理解或其他什么?
不推荐排序,因为它是 O(N*logN),其中所有其他解决方案都只是 O(N)。
您可以使用生成器表达式和generator-len函数,如下所示:
n = iterlen( x for x in lst if x < t )
Run Code Online (Sandbox Code Playgroud)
这比列表理解更好,因为您不需要构建临时列表(您使用 len),这会占用时间和内存。
根据问题的详细信息(列表大小、元素类型),转换为 numpy 数组可能会更快。您应该为这两种方法计时,看看哪种方法最适合您的情况。
当然,如果可能的话,最好的解决方案是将列表表示为一个 numpy 数组。如果你这样做,numpy.count_nonzero(lst < t)几乎可以肯定是最快的。
或者,如果您可以首先构建一个排序列表,则可以count_less使用bisect. 这里的复杂度是 O(logN),这对于大型列表来说是最快的。