Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表中的交集_Python_List_Intersection - Fatal编程技术网

Python列表中的交集

Python列表中的交集,python,list,intersection,Python,List,Intersection,我是Python的新手。我有以下清单: a = [[0,1,2,3],[4,5,6,7,8,9], ...] b = [[0,6,9],[1,5], ...] a&b可以有更多的组件,具体取决于数据。我想知道这些名单上有没有交叉点?如果有交叉点,我想得到这样的结果: c = [[6,9], ...] set((1,2,3,4,5)).intersection(set((1,2,3,7,8))) 首先,在示例代码中,这不是一个元组,而是一个列表(最初的问题是关于列表的,但在示例代码中引用了元

我是Python的新手。我有以下清单:

a = [[0,1,2,3],[4,5,6,7,8,9], ...]
b = [[0,6,9],[1,5], ...]
a&b可以有更多的组件,具体取决于数据。我想知道这些名单上有没有交叉点?如果有交叉点,我想得到这样的结果:

c = [[6,9], ...]
set((1,2,3,4,5)).intersection(set((1,2,3,7,8)))

首先,在示例代码中,这不是一个元组,而是一个列表(最初的问题是关于列表的,但在示例代码中引用了元组)

要获得两个元组或列表的交集,请使用如下代码:

c = [[6,9], ...]
set((1,2,3,4,5)).intersection(set((1,2,3,7,8)))
一行:

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_list = list(common_set)

内置于Python中的
set
类型本机支持交集。但是,请注意,
set
只能保存每个元素中的一个(类似于数学集合)。如果要保存每个元素中的多个元素,请尝试
collections.Counter

您可以使用
{}
符号(类似于字典,但没有值)设置
s
s:

您可以使用
&
运算符将它们相交:

>>> print a & b
set([2, 4])

考虑到交集是两个集合之间的运算,并且您已经给出了两个列表列表,所以很不清楚您在寻找什么。是否需要a[1]和b[0]的交点?你想要所有可能组合的交点吗

我猜你想要两个列表中两个集合的每个组合的交集,这将是:

from itertools import product
[set(x).intersection(set(y)) for x, y in product(a, b)]

另一种方法。。。假设您想要展平列表的交点

>>> 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]

交集是两个集合之间的运算。你有两个列表,所以我很难用一个例子来说明你想要什么。你能详细说明一下预期的结果吗
c
包含
[6,9]
,但显然不是
[1]
,这将是a[0]和b[1]的交集。我正在使用ST-DBSCAN进行时空聚类。我想修改eps1和eps2中的邻域。Eps1表示空间极限距离,eps2表示时间极限距离。我需要找到eps1和eps2内的社区交叉点。(对不起,英语不是很好)对不起,我不是在问你的用例(请原谅,我不会在ST-DBSCAN的背景下阅读),而是对函数f的数学精确描述,它会根据a和b的值得出c=f(a,b)。例如,如果我的用例是计算城市中建筑物的平均高度,那么f将是f(x_1,x_2,…,x_n)=(x_1+x_2+…+x_n)/n。我的问题是:列表a中是否有元素与列表b相交。例如,列表a中的[0,1,2,3]将在列表b中找到交集[0,6,9]和[1,5]。列表a中的[4,5,6,7,8,9]将在列表b中找到交集[0,6,9]和[1,5]。[4,5,6,7,8,9]和[0,6,9]之间有一个交集,因此结果将是[6,9],这不是答案,但与它很接近(我猜)。我们可以逐个手动检查吗?[0,6,9]与[0,1,2,3]、[4,5,6,7,8,9]连用,依此类推。[1,5]使用[0,1,2,3]、[4,5,6,7,8,9]等等。您可能希望筛选出空集合:
[set(x).乘积(a,b)中x的交集(set(y)),如果len(set(x).交集(set(y))>0]