比较两个列表的共同元素
给定两个输入列表,我该如何创建一个包含两个列表中共同元素的新列表呢?
举个例子:如果输入是 [1,2,3,4,5,6]
和 [3,5,7,9]
,那么结果应该是 [3, 5]
;再比如输入是 ['this','this','n','that']
和 ['this','not','that','that']
,结果应该是 ['this', 'that']
。
相关链接:
- 在Python中,如何找到两个列表中的共同单词并保持单词顺序?(保持顺序)
- Python - 多个列表的交集?(计算三个及以上列表的交集)
- 两个列表的交集,包括重复项?(保留重复元素)
14 个回答
47
你也可以使用集合来找出共同的部分,只需要一行代码:从其中一个集合中减去包含差异的集合。
A = [1,2,3,4]
B = [2,4,7,8]
commonalities = set(A) - (set(A) - set(B))
51
由S.Mark和SilentGhost提出的解决方案,基本上是告诉你在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]