假设我们有一个巨大的整数排序列表。使用不在列表中的上限来切片此列表的最快方法是什么?
例如,假设我们的列表是:
l=list(range(0,1000000, 2))
Run Code Online (Sandbox Code Playgroud)
(这是一个简单的例子,列表可以是任意长度的,没有特定的间隔,所以它不能与某个范围相关)
我们想要得到一个切片,其中的项目小于 limit=1001
实现这一目标的最快方法是什么,理想情况下不检查列表中的所有项目?一种常见的方法是使用列表推导式,例如[i for i in l if i<limit]
,但这样我们必须检查 l 的所有项目并将它们与限制进行比较。如果限制在列表中,我们可以使用类似的东西,l[:l.index(limit)]
但如果它不在列表中呢?任何的想法?
您可以为此使用bisect:
import bisect
print(l[:bisect.bisect_right(l, 1001)])
Run Code Online (Sandbox Code Playgroud)