python - 确定列表中大于阈值的项目的最有效方法是什么?
问题描述
基本上,我想知道找到值大于 n 的 python 列表元素的最有效方法是什么。
我相信,最简单但不是那么有效的方法如下,
for i in range(len(theList)):
if theList[i] > n:
subList.append(theList[i])
此外,我们有如下单行for
,
(subList for subList in theList if sublist > n)
(如果上述语法有任何问题,请纠正我)
最后,我们可以使用filter()
函数,它使用起来并不愉快,至少对我来说是这样。
以上方法都是我所知道的方法。如果您知道任何更好的方法,请告诉我。否则,请从效率和运行时间的角度解释哪个是最好的。
解决方案
对此并不总是正确的答案,并且有一些关于处理列表时不同方法的速度的 SO 帖子,请参见例如 此处、此处或此处。
什么是最快的方法可能很大程度上取决于您的清单。这就是说,让我们看看建议的方法有多快。
对于像这样的简单比较,您可以使用timeit:
1.案例:for循环
for_case = """newList=[]
for x in theList:
if x > n:
newList.append(x)"""
2.案例:列表理解
list_comp = '[x for x in theList if x > n]'
3.案例:过滤器(有点不像)
filtering = 'list(filter(lambda x: x > n, theList))'
一些准备工作:
import timeit
si = 'theList=range(2000);n=1000;' # using list(range(2000)) has no effect on the ranking
那么让我们看看:
timeit.timeit(si+list_comp, number=10000)
Out[21]: 1.3985847820003983
timeit.timeit(si+filtering, number=10000)
Out[22]: 3.315784254024038
timeit.timeit(si+for_case, number=10000)
Out[23]: 2.0093530920275953
因此,至少在我的机器上,列表理解将其带走,然后是for
-loop,至少在这种情况下,unlikedfilter
确实是最慢的。
推荐阅读
- airflow - 无法在 Windows 10 中找到 airflow.cfg 文件
- json - 角度响应错误:SyntaxError: Unexpected token < in JSON at JSON.parse 的位置 0
- python - 当 rect.x 更改 <1 时,Sprite 不会向右移动
- sql-server - SQL Server 链接服务器为列提供了不一致的元数据
- python - 这是一个改变背景颜色的python算法
- vuejs3 - 热重载在 VUE3 和顺风中不起作用
- php - 如何为 xml RSS 提要设置内容类型 text/xml?
- apache - apache2上奇怪的访问日志
- c++ - 在使用 form='unformatted' 在 fortran 中读取二进制文件时,I/O 超过了未格式化文件的记录结尾
- css - 如何修复和调整所有信息以保留在表格内?