Python 使用特定条件对给定列表元素进行分组

Python 使用特定条件对给定列表元素进行分组,python,Python,我有一个包含5个多边形的列表,如下所示: from itertools import compress from shapely.geometry import Polygon polys = [<shapely.geometry.polygon.Polygon object at 0x000002D634217668> <shapely.geometry.polygon.Polygon object at 0x000002D634217780>

我有一个包含5个多边形的列表,如下所示:

from itertools import compress
from shapely.geometry import Polygon

  polys = [<shapely.geometry.polygon.Polygon object at 0x000002D634217668>
     <shapely.geometry.polygon.Polygon object at 0x000002D634217780>
     <shapely.geometry.polygon.Polygon object at 0x000002D6341F9080>
     <shapely.geometry.polygon.Polygon object at 0x000002D634217FD0>
     <shapely.geometry.polygon.Polygon object at 0x000002D634217F60>]
注意:poly.intersects在相交时返回true,否则返回false。这只是shapely在这里的用法。 编辑: 根据Aran Fey的评论:

在3个多边形的情况下,例如,
[a,b,c]
,即使
a
c
不相交,
b
也可能与
a和
c
相交

结果将是:

[[b,c], [b,a]]
我必须找到所有这样的团体。
因为多边形的顺序并不重要,所以也应该删除重复的组(包含相同的多边形)

我唯一能想到的是迭代所有多边形,然后循环所有其他多边形以找到交点。(这意味着算法具有二次运行时复杂性。)效率低下,但它完成了任务

result = []
for i, shape in enumerate(polys):
    intersected_shapes = [poly for poly in polys[i+1:] if shape.intersects(poly)]
    if intersected_shapes:
        intersected_shapes.append(shape)
        result.append(intersected_shapes)
使用问题()中的输入
[a,b,c]
,这将生成输出:

[[b, a], [c, b]]

因此,如果有3个多边形
[a,b,c]
,并且
a
c
不相交,但是
b
a
c
相交,结果应该是
[[a,b,c]]
?即使
a
c
不相交,
b
也可能与
a
c
相交。比如说,谢谢你的照片。是的,很抱歉我的错误。所以结果将是[[b,c],[b,a]],所以在我的问题中,我必须找到所有这样的组。顺便说一句,可能会得到重复的组?因为多边形的顺序并不重要,所以应该删除重复的组(包含相同的多边形)@ian我认为不会发生这种情况,不会。代码只在列表后面出现的多边形上循环(例如
a
迭代
b
c
,但是
b
只迭代
c
,而
c
根本不迭代),所以我不知道如何创建任何重复项。
[[b, a], [c, b]]