我正在寻找最快的方法来查找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
我的目标(如果可能)是改进代码。欢迎任何建议。
编辑:我忘了提到最多有一个共同点。
答案 0 :(得分:1)
这是非常低效的,并且它仅获取两个列表中的第一个公共项目,而不是全部,因此,更好的紧凑型解决方案是使用集合。 像这样
def common_item(l1, l2):
return list(set(l1).intersection(set(l2)))
OR
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
答案 1 :(得分:-1)
您可以在this link上找到解决该问题的Python方法。
示例:
a = set([1, 2, 3])
b = set([2, 3, 4])
print(a & b)
请注意如何使用&运算符表示集合相交。
可以找到here的集合交点的时间复杂度答案
这是集合大小的线性关系,但是您还必须将列表转换为集合。但是,由于它们是哈希表,因此也是线性的。 another answer here