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

时间:2016-12-29 19:26:42

标签: python list python-3.x binary-search

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

L = [(0, "test", "value"), (0, "test2", "value2")]

我需要= bisect_left每个元组的第一项才能在列表中找到索引。但是,我无法想到这样做的方法,而无需事先创建所有这些第一项的列表:

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

任何关于其他方式的想法,因为它的工作原理,但当我的列表长达5000项时,它很慢,我需要一个更快的方法吗?

2 个答案:

答案 0 :(得分:4)

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

简单的事情:

class Proxy(object):
    def __getitem__(self, item):
        return L[item][0]

答案 1 :(得分:2)

import bisect
L = [(0, "test", "value"), (1, "test2", "value2"),(3,"test3","value3")]
print (bisect.bisect_left(L,(2,)))

python处理元组比较很棒......只需传递它(2,"asd","dsa")甚至只传递(2,)(或者你想要找到的任何索引位置项)

或者你可以传递它(0,"asd","value"),它会知道把它放在另一个(0,"test","value")项元组的左边...或(0,"zzzz","value")它会知道把它放到该项目的权利