a = [1,2,3,4,5]
b = [1,3,5,6]
c = a and b
print c

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

如何在两个列表上实现布尔AND操作(列表交集)?


当前回答

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

应该像做梦一样工作。并且,如果可以的话,使用集合而不是列表来避免所有这些类型更改!

其他回答

当我们使用tuple时,我们想要交叉

a=([1,2,3,4,5,20], [8,3,9,5,1,4,20])

for i in range(len(a)):

    b=set(a[i-1]).intersection(a[i])
print(b)
{1, 3, 4, 5, 20}

如果你将两个列表中较大的一个转换为一个集合,你可以使用intersection()获得该集合与任何可迭代对象的交集:

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

你也可以使用numpy.intersect1d(ar1, ar2)。 它返回两个数组中唯一且已排序的值。

对我来说,使用列表推导式是一个非常明显的方法。不确定性能如何,但至少能保持列表。

[x for x in a if x in b]

或者"所有在A中的x值,如果x值在B中"

这样可以得到两个列表的交集,也可以得到公共重复项。

>>> from collections import Counter
>>> a = Counter([1,2,3,4,5])
>>> b = Counter([1,3,5,6])
>>> a &= b
>>> list(a.elements())
[1, 3, 5]