2017-09-27 26 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 

这将元组的列表结束。 较长的版本会破坏找到该对象的内容,但理解代码不会。

相关问题