Necesita iterar en algún nivel. ( Actualización : he editado para eliminar todos los bucles "for", excepto una comprensión de la lista )
# imports used throughout this example
from shapely.geometry import Point
from shapely.ops import cascaded_union
from itertools import combinations
# Here are your input shapes (circles A, B, C)
A = Point(3, 6).buffer(4)
B = Point(6, 2).buffer(4)
C = Point(1, 2).buffer(4)
# list the shapes so they are iterable
shapes = [A, B, C]
Primero necesita la unión de todas las intersecciones (use una unión en cascada ), usando el par de combinación de cada forma. Luego, elimina (a través de difference) las intersecciones de la unión de todas las formas.
# All intersections
inter = cascaded_union([pair[0].intersection(pair[1]) for pair in combinations(shapes, 2)])
# Remove from union of all shapes
nonoverlap = cascaded_union(shapes).difference(inter)
Esto es lo que nonoverlapparece (a través de JTS Test Builder):
