我有以下清单
j=[4,5,6,7,1,3,7,5]
Run Code Online (Sandbox Code Playgroud)
返回[5,5,6,7,7]j大于或等于5的元素的最简单方法是什么?
Mic*_*zek 81
您可以使用列表推导来过滤它:
j2 = [i for i in j if i >= 5]
Run Code Online (Sandbox Code Playgroud)
如果你真的希望它像你的例子一样排序,你可以使用sorted:
j2 = sorted(i for i in j if i >= 5)
Run Code Online (Sandbox Code Playgroud)
或致电sort最终名单:
j2 = [i for i in j if i >= 5]
j2.sort()
Run Code Online (Sandbox Code Playgroud)
Jus*_*ini 12
列表理解是一种简单的方法:
j2 = [x for x in j if x >= 5]
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用filter完全相同的结果:
j2 = filter(lambda x: x >= 5, j)
Run Code Online (Sandbox Code Playgroud)
请注意,原始列表j未经修改.
使用(简短版本,不使用 , usingfilter执行函数):lambda__le__
j2 = filter((5).__le__, j)\nRun Code Online (Sandbox Code Playgroud)\n示例(Python\xc2\xa03):
\n>>> j=[4,5,6,7,1,3,7,5]\n>>> j2 = filter((5).__le__, j)\n>>> j2\n<filter object at 0x000000955D16DC18>\n>>> list(j2)\n[5, 6, 7, 7, 5]\n>>>\nRun Code Online (Sandbox Code Playgroud)\n示例(Python\xc2\xa02):
\n>>> j=[4,5,6,7,1,3,7,5]\n>>> j2 = filter((5).__le__, j)\n>>> j2\n[5, 6, 7, 7, 5]\n>>>\nRun Code Online (Sandbox Code Playgroud)\n使用__le__。我推荐这个。这很容易。__le__是你的朋友。
如果想将其排序到所需的输出(两个版本):
\n>>> j=[4,5,6,7,1,3,7,5]\n>>> j2 = filter((5).__le__, j)\n>>> sorted(j2)\n[5, 5, 6, 7, 7]\n>>>\nRun Code Online (Sandbox Code Playgroud)\n使用sorted
>>> from timeit import timeit\n>>> timeit(lambda: [i for i in j if i >= 5]) # Michael Mrozek\n1.4558496298222325\n>>> timeit(lambda: filter(lambda x: x >= 5, j)) # Justin Ardini\n0.693048732089828\n>>> timeit(lambda: filter((5).__le__, j)) # Mine\n0.714461565831428\n>>>\nRun Code Online (Sandbox Code Playgroud)\n所以贾斯汀赢了!!
\n和number=1:
>>> from timeit import timeit\n>>> timeit(lambda: [i for i in j if i >= 5],number=1) # Michael Mrozek\n1.642193421957927e-05\n>>> timeit(lambda: filter(lambda x: x >= 5, j),number=1) # Justin Ardini\n3.421236300482633e-06\n>>> timeit(lambda: filter((5).__le__, j),number=1) # Mine\n1.8474676011237534e-05\n>>>\nRun Code Online (Sandbox Code Playgroud)\n所以迈克尔赢了!!
\n>>> from timeit import timeit\n>>> timeit(lambda: [i for i in j if i >= 5],number=10) # Michael Mrozek\n4.721306089550126e-05\n>>> timeit(lambda: filter(lambda x: x >= 5, j),number=10) # Justin Ardini\n1.0947956184281793e-05\n>>> timeit(lambda: filter((5).__le__, j),number=10) # Mine\n1.5053439710754901e-05\n>>>\nRun Code Online (Sandbox Code Playgroud)\n所以贾斯汀再次获胜!!
\n