python - 计算低于阈值的列表值的最快方法

标签 python performance list count

是否有等价于 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/

相关文章:

c++ - bool 数组上的原始循环比变换或 for_each 快 5 倍

javascript - (添加和)使用 JavaScript/jQuery 删除列表项

python - 带外键的 Django ModelForm

python - Dockerfile - debian Jessie 404 : packages not found

python - 类型错误 : 'Logger' object is not callable

performance - 我如何向我的公司销售非功能测试工具?

java - 为什么执行 Mockito 模拟的性能如此不稳定?

python - 在 Python 中组合两种不同的可迭代类型

java - 从 List<Integer> 中检索所有值对

python - 将列表从数据帧转换为 numpy 数组