我有一个这样的列表,例如:
L = [(0, "test", "value"), (0, "test2", "value2")]
我需要= bisect_left每个元组的第一项才能在列表中找到索引。但是,我无法想到这样做的方法,而无需事先创建所有这些第一项的列表:
exampleList = [L[i][0] for i in range(len(L))]
任何关于其他方式的想法,因为它的工作原理,但当我的列表长达5000项时,它很慢,我需要一个更快的方法吗?
答案 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")
它会知道把它放到该项目的权利