2017-09-27 28 views
-1

假設我有一個具有屬性from_id的對象的列表lst1。另外,我還有另一個具有屬性to_id的對象的列表lst2在兩個列表中查找對應關係的最快方法Python

我需要爲lst1中的每個對象找到它的「對」lst2from_id應該等於to_id)。

lst2中最多隻能有一個對象(零個或一個),對應於lst1中的給定對象。

什麼是在Python中實現它的最快方法?

+0

內部循環,但它給出O(n^2)並且當列表超過100個項目時非常緩慢。 –

+0

這取決於你的對象。但是,最有可能的是NumPy會有所幫助。例如,這裏是[鏈接](https://stackoverflow.com/questions/5534500/whats-the-fastest-way-to-compare-two-large-lists-of-1s-0s-and-return-在二) – 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 

這將元組的列表結束。 較長的版本會破壞找到該對象的內容,但理解代碼不會。

相關問題