是否有等价于 numpy.count_nonzero(lst < t) 的列表方法? 当我在列表 (lst < t) 上使用它时,只返回 True 而不是 bool 值列表。 我想计算低于某个阈值的列表值 什么更好 - 转换为 numpy 数组,使用排序,某种列表/生成器理解或其他东西?
最佳答案
不推荐排序,因为它是 O(N*logN),而所有其他解决方案都只是 O(N)。
您可以使用生成器表达式和 generator-len函数,像这样:
n = iterlen( x for x in lst if x < t )
这比列表理解要好,因为您不需要构造临时列表(其中的 len),这会占用时间和内存。
根据问题的细节(列表大小、元素类型),转换为 numpy 数组可能会更快。您应该对这两种方法进行计时,看看哪种方法最适合您的情况。
当然,如果可能的话,最好的解决方案是首先将列表表示为一个 numpy 数组。如果你这样做,numpy.count_nonzero(lst < t)
几乎肯定是最快的。
或者,如果您可以先构建一个排序列表,则可以轻松实现 count_less
功能使用 bisect
.这里的复杂度是 O(logN),这对于大型列表来说是最快的。
关于python - 计算低于阈值的列表值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33952565/