2016-12-29 8 views
3

Iは、例えば、このようなリストを有する: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

(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,))) 

のpythonのお得な情報...ちょうどそれを(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

すばらしい答え!ありがとう。 –