2016-12-29 2 views
3

나는 예를 들어 이런 목록이 있습니다bisect_left, 파이썬 3

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

을 나는 목록에서 인덱스를 찾기 위해 각 튜플의 첫 번째 항목 bisect_left = 할 필요가있다.

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

이 작업을 수행하는 또 다른 방법에 어떤 아이디어를 작동으로하지만 내 목록 : 그러나, 나는 전에 손이 먼저 모든 항목의 목록을 작성하지 않고이 일을하는 방법을 생각할 수 없다 5000 아이템을 얻는 데 시간이 많이 걸리며 빠른 방법이 필요합니까?

+0

[왼쪽 또는 오른쪽 등분] (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

파이썬은 내장 된 bisect_left을 가지고 있습니다. 전체 중간 목록을 작성할 필요가 없으며, 그 위치에있는 튜플의 첫 번째 항목을 검색하는 게으른 개체가 필요합니다. 간단한 같은

뭔가 : 튜플 비교와

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

좋은 답변입니다! 감사. –