如何找到列表交集?

446 投票
17 回答
539875 浏览
提问于 2025-04-16 04:03
a = [1,2,3,4,5]
b = [1,3,5,6]
c = a and b
print c

实际输出: [1,3,5,6]
期望输出: [1,3,5]

我们怎么才能在两个列表上实现布尔与操作(也就是找出它们的交集)呢?

17 个回答

119

如果你把两个列表中较大的那个转换成一个集合,你就可以用 intersection() 方法来找到这个集合和任何可迭代对象的交集。

a = [1,2,3,4,5]
b = [1,3,5,6]
set(a).intersection(b)
200

使用列表推导式对我来说是个很明显的选择。我不太确定性能如何,但至少结果还是列表。

[x for x in a if x in b]

或者说“所有在A里的x值,只要这个x值也在B里”。

710

如果顺序不重要,而且你不需要担心重复的情况,那么你可以使用集合交集的方法:

>>> a = [1,2,3,4,5]
>>> b = [1,3,5,6]
>>> list(set(a) & set(b))
[1, 3, 5]

撰写回答