2016-12-29 61 views
3

我有例如像这样的列表:bisect_left上列表内列表的第一项,Python 3中

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

,我需要= bisect_left每个元组的第一个项目到在列表中找到的索引。但是,我想不出这样做的方式没有事先创建所有这些第一项的列表:

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

上另一种方式来做到这一点任何想法,它的工作原理,但是当我的列表到5000个项目长,这是非常缓慢的,我需要一个更快的方式做到这一点?

+0

[bisect left or right](https://docs.python.org/2/library/bisect.html)已经在该语言中。 – Prune

回答

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

与元组比较蟒蛇交易伟大的...只是把它传递(2,"asd","dsa")甚至只是(2,)(或任何你的索引位置的项目你正在努力寻找)

或者你可以通过它(0,"asd","value")它会知道把它放在其他(0,"test","value")项目元组...或(0,"zzzz","value")的左边,它会知道把它放在该项目的右边

4

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

一些东西:

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

很好的答案!谢谢。 –

相关问题