Вы можете использовать itertools.groupby
:
import itertools
coords = [(0.0, -0.31), (2.73, -0.31), (2.73, 0.33), (2.02, 0.95), (1.77, 2.44), (1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]
c = [[a, list(b)] for a, b in itertools.groupby(coords, key=lambda x:x == coords[0])]
new_result = [c[i][-1]+c[i+1][-1] for i in range(0, len(c), 2)]
Выход:
[[(0.0, -0.31), (2.73, -0.31), (2.73, 0.33), (2.02, 0.95), (1.77, 2.44), (1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33)], [(0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]]
Редактировать: чтобы найти все группы, вы можете использовать генератор:
def groups(data):
for i, a in enumerate(data):
c = [[a, list(b)] for a, b in itertools.groupby(data[i:], key=lambda x:x == a)]
yield [c[i][-1]+c[i+1][-1] for i in range(0, len(c)-1, 2)]
print(list(groups(coords)))
Вывод:
[[[(0.0, -0.31), (2.73, -0.31), (2.73, 0.33), (2.02, 0.95), (1.77, 2.44), (1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33)], [(0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(2.73, -0.31), (2.73, 0.33), (2.02, 0.95), (1.77, 2.44), (1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(2.73, 0.33), (2.02, 0.95), (1.77, 2.44), (1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(2.02, 0.95), (1.77, 2.44), (1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(1.77, 2.44), (1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(1.39, 4.76), (0.64, 4.76), (0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(0.64, 4.76), (0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(0.0, 3.46), (0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(0.0, 0.33), (0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(0.0, -0.31), (2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(2.73, -0.43), (2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43)]], [[(2.73, -3.5), (6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(6.73, -3.5), (6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(6.73, -3.0), (6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(6.73, -2.0), (6.73, -0.43), (2.73, -0.43)]], [[(6.73, -0.43), (2.73, -0.43)]], []]