我是Python的新手。我有这个清单:
a = [[0,1,2,3],[4,5,6,7,8,9], ...]
b = [[0,6,9],[1,5], ...]
a& b可以有更多的组件,取决于数据。我想知道这些清单上有没有交叉点?如果有任何交叉点,我想得到这样的结果:
c = [[6,9], ...]
答案 0 :(得分:2)
Python内置的set
类型本身支持交集。但请注意,set
只能容纳每个元素中的一个(如数学集)。如果您想要保留每个元素中的多个元素,请尝试collections.Counter
。
您可以使用set
表示法制作{}
(如字典,但没有值):
>>> a = {1, 2, 3, 4, 5}
>>> b = {2, 4, 6, 8, 10}
您可以使用&
运算符与它们相交:
>>> print a & b
set([2, 4])
答案 1 :(得分:1)
首先,在您的示例代码中,这不是元组,它是一个列表(原始问题询问列表,但是示例代码中引用了元组)。
要获得两个元组或列表的交集,请使用如下代码:
set((1,2,3,4,5)).intersection(set((1,2,3,7,8)))
答案 2 :(得分:1)
在一行中:
common_set = set([e for r in a for e in r])&set([e for r in b for e in r])
或者更容易:
common_set = set(sum(a,[])) & set(sum(b,[]))
Common将是一套。您可以轻松地将设置转换为您需要的列表:
common_list = list(common_set)
答案 3 :(得分:1)
鉴于交集是两组之间的操作,并且您已经给出了两个列表列表,因此您不清楚自己在寻找什么。你想要[1]和b [0]的交集吗?你想要每种可能的组合的交集吗?
我猜你想要两个名单之间两组的每个组合的交集,这将是:
from itertools import product
[set(x).intersection(set(y)) for x, y in product(a, b)]
答案 4 :(得分:0)
另一种方法...假设您想要展平列表的交集。
>>> from itertools import chain
>>> a = [[0,1,2,3],[4,5,6,7,8,9]]
>>> b = [[0,6,9],[1,5]]
>>> list(set(chain(*a)).intersection(set(chain(*b))))
[0, 9, 5, 6, 1]