Python:切割/切片排序列表的优化方法

Bor*_*jaX 8 python list find

在Python中是否有任何预先制作的优化工具/库来切割/切片列表中的值"小于"某些东西?

这是问题所在:假设我有一个列表如下:

a=[1,3,5,7,9]
Run Code Online (Sandbox Code Playgroud)

我想删除所有<=6 的数字,所以结果列表将是

[7,9]
Run Code Online (Sandbox Code Playgroud)

6不在列表中,所以我不能使用列表的内置index(6)方法.我可以这样做:

#!/usr/bin/env python
a = [1, 3, 5, 7, 9]
cut=6
for i in range(len(a)-1, -2, -1):
    if a[i] <= cut:
        break
b = a[i+1:]
print "Cut list: %s" % b
Run Code Online (Sandbox Code Playgroud)

如果要切割的索引接近列表的末尾,这将是相当快速的方法,但如果项目接近列表的开头,那将是低效的(让我们说,我想删除所有项目>2,会有很多迭代).

我也可以使用二进制搜索等实现我自己的find方法,但我想知道是否有一个更宽的内置库来处理这类我可以在其他情况下重用的东西(例如,如果我需要删除所有的数字>=6).

先感谢您.

Jon*_*nts 6

您可以使用bisect模块执行排序搜索:

>>> import bisect
>>> a[bisect.bisect_left(a, 6):]
[7, 9]
Run Code Online (Sandbox Code Playgroud)


fil*_*mor 5

bisect.bisect_left 我想你正在寻找什么.

  • 希望我在2天前写自己之前就知道这个. (2认同)