首页 > 解决方案 > 在 Python 中查找两个列表之间公共项的最快方法

问题描述

我正在寻找在 Python 中的两个列表之间找到共同项目的最快方法。这些列表具有相同的长度,包含整数(至少 10k)并且是无序的。经过一段时间的搜索,我找到了这个解决方案:

def common_item(l1, l2):
    s = None
    l2 = set(l2)
    for i in l1:
        if i in l2:
            s = i
            break

    return s

我的目标(如果可能的话)是改进代码。欢迎任何建议。

编辑:我忘了提到最多有一个共同点。

标签: pythonperformance

解决方案


这是非常低效的,它只获取两个列表中的第一个公共项,而不是全部,更好的紧凑解决方案是使用集合。像这样,

def common_item(l1, l2):
    return list(set(l1).intersection(set(l2)))

或者

def common_item(l1, l2):
    return list(set(l1) & set(l2))

假设所有元素都是唯一的,它应该返回两个列表中共有的所有元素的列表。

如果列表中有重复的元素,那么您可以尝试这种方法,如果遇到它,它会从列表中删除该元素,但会以运行时为代价,当它很小时,这是微不足道的。

def common_item(l1, l2):
    res = []
    for x in l1:
        if x in l2:
            res.append(x)
            l2.remove(x)
    return res

推荐阅读