比较两个列表的共同元素

287 投票
14 回答
533626 浏览
提问于 2025-04-15 22:53

给定两个输入列表,我该如何创建一个包含两个列表中共同元素的新列表呢?

举个例子:如果输入是 [1,2,3,4,5,6][3,5,7,9],那么结果应该是 [3, 5];再比如输入是 ['this','this','n','that']['this','not','that','that'],结果应该是 ['this', 'that']


相关链接:

14 个回答

47

你也可以使用集合来找出共同的部分,只需要一行代码:从其中一个集合中减去包含差异的集合。

A = [1,2,3,4]
B = [2,4,7,8]
commonalities = set(A) - (set(A) - set(B))
51

S.MarkSilentGhost提出的解决方案,基本上是告诉你在Python中应该怎么做。不过,我觉得你也应该知道为什么你的方法不奏效。问题在于,当你找到两个列表中的第一个共同元素时,你只返回了这个单一的元素。你可以通过创建一个result列表,把所有的共同元素都放到这个列表里来修正你的方法:

def common_elements(list1, list2):
    result = []
    for element in list1:
        if element in list2:
            result.append(element)
    return result

还有一种更简短的写法,使用了列表推导式:

def common_elements(list1, list2):
    return [element for element in list1 if element in list2]

不过,正如我所说,这种方法效率很低——Python内置的集合类型要高效得多,因为它们是用C语言实现的。

505

使用Python的集合交集功能:

>>> list1 = [1,2,3,4,5,6]
>>> list2 = [3, 5, 7, 9]
>>> list(set(list1).intersection(list2))
[3, 5]

撰写回答