2017-09-27 6 views
-1

from_id 속성을 가진 객체의 목록이 lst1 인 것으로 가정합니다. 또한, to_id 속성을 가진 객체 목록이 다른 lst2 있습니다.두리스트에서 서신을 찾는 가장 빠른 방법 Python

lst1의 각 개체에 대해 lst2 (from_idto_id이어야 함)의 "쌍"을 찾아야합니다.

lst1의 주어진 객체에 해당하는 lst2의 객체가 하나 이상있을 수 있습니다.

파이썬으로 구현하는 가장 빠른 방법은 무엇입니까?

+0

내부 루핑이지만 목록에 100 개가 넘는 항목이있는 경우 O (n^2)이고 매우 느립니다. –

+0

그것은 당신의 물건에 달려 있습니다. 그러나 아마도 NumPy가 도움이 될 것입니다. 예를 들어, 다음은 [링크] (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 

이 튜플의리스트로 끝납니다로 나눌 수 있습니다. 버전이 길수록 개체가 발견 된 내용이 손상되며 이해 코드는 손상되지 않습니다.

관련 문제