2017-09-27 12 views
-1

from_idという属性を持つオブジェクトのリストlst1があるとします。また、別のリストlst2の属性がto_idのオブジェクトがあります。2つのリスト内の対応を見つける最速の方法Python

lst1の各オブジェクトについて、lst2from_idto_idになるはずです)の「ペア」を見つける必要があります。

lst1の指定されたオブジェクトに対応するlst2のオブジェクトが1つまで存在します。

Pythonでこれを達成する最も速い方法は何ですか?

+0

内部ルーピングですが、リストに100を超える項目がある場合はO(n^2)と非常に遅くなります。 –

+0

これはあなたのオブジェクトによって異なります。しかし、おそらくNumPyが役に立ちます。たとえば、次は[link]です(https://stackoverflow.com/questions/5534500/whats-the-fastest-way-to-compare-two-large-lists-of-1s-0s-and-return- the-di) – Alperen

答えて

0

セット;それはキーなしの辞書(ちょうど値)のように機能します。最初にあなたのリストをセットに変換してください。

lst1 = set(lst1) 
lst2 = set(lst2) 

res = [(obj, to_obj) for obj in lst1 for to_obj in lst2 if obj.from_id == to_obj.to_id] 

これは、これはタプルのリストで終了します

result = [] 
for obj in lst1: 
    for to_obj in lst2: 
     if obj.from_id == to_obj.to_id: 
      result.append((obj, to_obj)) 
      break 

に分けることができます。 長いバージョンでは、オブジェクトが見つかったものが破損しますが、解説コードでは認識されません。

関連する問題