>>> from timeit import timeit
>>> timeit(lambda: [i for i in j if i >= 5]) # Michael Mrozek
1.4558496298222325
>>> timeit(lambda: filter(lambda x: x >= 5, j)) # Justin Ardini
0.693048732089828
>>> timeit(lambda: filter((5).__le__, j)) # Mine
0.714461565831428
>>>
所以贾斯汀赢了!! 使用number=1:
>>> from timeit import timeit
>>> timeit(lambda: [i for i in j if i >= 5],number=1) # Michael Mrozek
1.642193421957927e-05
>>> timeit(lambda: filter(lambda x: x >= 5, j),number=1) # Justin Ardini
3.421236300482633e-06
>>> timeit(lambda: filter((5).__le__, j),number=1) # Mine
1.8474676011237534e-05
>>>
所以迈克尔赢了!!
>>> from timeit import timeit
>>> timeit(lambda: [i for i in j if i >= 5],number=10) # Michael Mrozek
4.721306089550126e-05
>>> timeit(lambda: filter(lambda x: x >= 5, j),number=10) # Justin Ardini
1.0947956184281793e-05
>>> timeit(lambda: filter((5).__le__, j),number=10) # Mine
1.5053439710754901e-05
>>>
7条答案
按热度按时间bfhwhh0e1#
你可以使用列表解析来过滤它:
如果你真的想让它像你的例子一样排序,你可以使用sorted:
或者调用最终列表中的
sort
:xriantvc2#
列表解析是一种简单的方法:
或者,可以使用
filter
获得完全相同的结果:注意,原始列表
j
未被修改。wbgh16ku3#
你可以使用列表解析:
guykilcj4#
使用
filter
(不使用lambda
执行函数的简短版本,使用__le__
):示例(Python 3):
示例(Python 2):
使用
__le__
。我推荐这个。它非常简单。__le__
是你的朋友。如果要将其排序为所需输出(两个版本):
使用
sorted
计时:
所以贾斯汀赢了!!
使用
number=1
:所以迈克尔赢了!!
所以贾斯汀又赢了!!
vktxenjb5#
如果您正在考虑使用NumPy模块,它会使此任务变得非常简单,正如所要求的那样:
方括号内的代码
j >= 5
生成一个True
或False
值列表,这些值作为索引从j
中选择所需的值,最后,我们使用NumPy内置的sort
函数进行排序。测试结果(NumPy数组):
zrfyljdw6#
由于所需的输出已排序,因此还需要对其进行排序:
mitkmikd7#
还有一个办法
它在Python 3中进行了测试。