列表中列表第一项的 bisect_left,Python 3

Oll*_*lu_ 3 python list binary-search python-3.x

例如,我有一个这样的列表:

L = [(0, "test", "value"), (0, "test2", "value2")]
Run Code Online (Sandbox Code Playgroud)

我需要 = bisect_left 每个元组的第一项来查找列表中的索引。但是,如果不事先创建所有这些第一项的列表,我想不出一种方法来做到这一点:

exampleList = [L[i][0] for i in range(len(L))]

有没有其他方法可以做到这一点,因为它有效,但是当我的列表达到 5000 个项目时,它非常慢,我需要一种更快的方法来做到这一点?

wim*_*wim 6

Python有一个内置的bisect_left,你可以使用它。您不需要构建整个中间列表,您只需要一个惰性对象来检索元组中该位置的第一项。

一些简单的事情,比如:

class Proxy(object):
    def __getitem__(self, item):
        return L[item][0]
Run Code Online (Sandbox Code Playgroud)

从 Python 3.10 开始,bisect您可以使用关键函数进行搜索,因此不再需要包装器。在你的情况下,它会是key=operator.itemgetter(0)