-1
假设我有一个具有属性from_id
的对象的列表lst1
。另外,我还有另一个具有属性to_id
的对象的列表lst2
。在两个列表中查找对应关系的最快方法Python
我需要为lst1
中的每个对象找到它的“对”lst2
(from_id
应该等于to_id
)。
lst2
中最多只能有一个对象(零个或一个),对应于lst1
中的给定对象。
什么是在Python中实现它的最快方法?
假设我有一个具有属性from_id
的对象的列表lst1
。另外,我还有另一个具有属性to_id
的对象的列表lst2
。在两个列表中查找对应关系的最快方法Python
我需要为lst1
中的每个对象找到它的“对”lst2
(from_id
应该等于to_id
)。
lst2
中最多只能有一个对象(零个或一个),对应于lst1
中的给定对象。
什么是在Python中实现它的最快方法?
使用套;因为它像一个没有键的字典(只是值)。首先将您的列表转换为集合。
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
这将元组的列表结束。 较长的版本会破坏找到该对象的内容,但理解代码不会。
内部循环,但它给出O(n^2)并且当列表超过100个项目时非常缓慢。 –
这取决于你的对象。但是,最有可能的是NumPy会有所帮助。例如,这里是[链接](https://stackoverflow.com/questions/5534500/whats-the-fastest-way-to-compare-two-large-lists-of-1s-0s-and-return-在二) – Alperen