在两个列表中找到对应关系的最快方法

时间:2017-09-27 08:41:37

标签: python

假设我有一个具有属性lst1的对象列表from_id。另外,我还有另一个列出lst2个具有属性to_id的对象列表。

我需要在lst1 lst2找到from_id中的每个对象(to_id应该等于lst2)。

lst1最多只能有一个对象(零或一个)与Fatal error: Uncaught Doctrine\ORM\Query\QueryException: SELECT DAY(h.date) AS day FROM Entities\Hit h GROUP BY day in 中的给定对象相对应。

在python中实现它的最快方法是什么?

1 个答案:

答案 0 :(得分:0)

使用设置;因为它的工作方式就像没有键的dict(只是值)。首先将列表转换为集合。

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

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