首页 > 解决方案 > 确定列表中大于阈值的项目的最有效方法是什么?

问题描述

基本上,我想知道找到值大于 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()函数,它使用起来并不愉快,至少对我来说是这样。

以上方法都是我所知道的方法。如果您知道任何更好的方法,请告诉我。否则,请从效率和运行时间的角度解释哪个是最好的。

标签: pythonlistruntimelist-comprehension

解决方案


对此并不总是正确的答案,并且有一些关于处理列表时不同方法的速度的 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确实是最慢的。


推荐阅读