返回列表中大于某个值的项目列表

时间:2011-01-03 20:09:26

标签: python

我有以下列表

j=[4,5,6,7,1,3,7,5]

返回[5,5,6,7,7]作为j中大于或等于5的元素的最简单方法是什么?

7 个答案:

答案 0 :(得分:72)

您可以使用列表推导来过滤它:

j2 = [i for i in j if i >= 5]

如果您确实希望它按照您的示例进行排序,则可以使用sorted

j2 = sorted(i for i in j if i >= 5)

或在最终列表中致电sort

j2 = [i for i in j if i >= 5]
j2.sort()

答案 1 :(得分:12)

列表理解是一种简单的方法:

j2 = [x for x in j if x >= 5]

或者,您可以使用filter获得完全相同的结果:

j2 = filter(lambda x: x >= 5, j)

请注意,原始列表j未经修改。

答案 2 :(得分:9)

您可以使用列表理解:

[x for x in j if x >= 5]

答案 3 :(得分:1)

由于您对所需的输出进行了排序,因此您还需要对其进行排序:

>>> j=[4, 5, 6, 7, 1, 3, 7, 5]
>>> sorted(x for x in j if x >= 5)
[5, 5, 6, 7, 7]

答案 4 :(得分:1)

使用filter(简短版本,不使用lambda使用__le__进行功能):

j2 = filter((5).__le__, j)

示例(python 3):

>>> j=[4,5,6,7,1,3,7,5]
>>> j2 = filter((5).__le__, j)
>>> j2
<filter object at 0x000000955D16DC18>
>>> list(j2)
[5, 6, 7, 7, 5]
>>> 

示例(python 2):

>>> j=[4,5,6,7,1,3,7,5]
>>> j2 = filter((5).__le__, j)
>>> j2
[5, 6, 7, 7, 5]
>>>

使用__le__,我很推荐,__le__是你的朋友

如果要将其排序为所需的输出(两个版本):

>>> j=[4,5,6,7,1,3,7,5]
>>> j2 = filter((5).__le__, j)
>>> sorted(j2)
[5, 5, 6, 7, 7]
>>> 

使用sorted

时间:

>>> 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
>>> 

所以贾斯汀再次获胜!

答案 5 :(得分:1)

如果您正在考虑使用numpy模块,则可以根据要求使此任务非常简单:

import numpy as np

j = np.array([4, 5, 6, 7, 1, 3, 7, 5])

j2 = np.sort(j[j >= 5])

方括号j >= 5中的代码产生TrueFalse值的列表,然后将它们用作在j中选择所需值的索引。最后,我们使用sort中内置的numpy函数进行排序。

测试结果(numpy数组):

array([5, 5, 6, 7, 7])

答案 6 :(得分:0)

还有另一种方法

"([^"]+)"

在3.x版中测试