Поскольку ваш ввод уже является строкой (и ваш ожидаемый результат также?), Вы можете попробовать это супер-ленивое решение, используя регулярное выражение (([^,]+).*\2)
с обратными ссылками. Здесь [^,]+
- первая пара координат, .*
остальные пары и \2
снова первая пара.
>>> s = '17.17165756225586 -28.102264404296875,17.184370040893555 -28.200496673583984,17.1986083984375 -28.223613739013672,17.17165756225586 -28.102264404296875, 28.865726470947266 -28.761619567871094,28.80694007873535 -28.75750160217285,28.792499542236328 -28.706947326660156, 28.865726470947266 -28.761619567871094'
>>> re.findall(r"(([^,]+).*\2)", s)
[('17.17165756225586 -28.102264404296875,17.184370040893555 -28.200496673583984,17.1986083984375 -28.223613739013672,17.17165756225586 -28.102264404296875',
'17.17165756225586 -28.102264404296875'),
(' 28.865726470947266 -28.761619567871094,28.80694007873535 -28.75750160217285,28.792499542236328 -28.706947326660156, 28.865726470947266 -28.761619567871094',
' 28.865726470947266 -28.761619567871094')]
Или используйте finditer
и получите group
, чтобы получить список строк напрямую:
>>> [m.group() for m in re.finditer(r"(([^,]+).*\2)", s)]
['17.17165756225586 -28.102264404296875,17.184370040893555 -28.200496673583984,17.1986083984375 -28.223613739013672,17.17165756225586 -28.102264404296875',
' 28.865726470947266 -28.761619567871094,28.80694007873535 -28.75750160217285,28.792499542236328 -28.706947326660156, 28.865726470947266 -28.761619567871094']
После некоторой постобработки, чтобы получить фактические списки пар чисел (с _
, являющимся результатом findall
; для finditer
опустите [0]
):
>>> [[tuple(map(float, y.split())) for y in x[0].split(",")] for x in _]
[[(17.17165756225586, -28.102264404296875),
(17.184370040893555, -28.200496673583984),
(17.1986083984375, -28.223613739013672),
(17.17165756225586, -28.102264404296875)],
[(28.865726470947266, -28.761619567871094),
(28.80694007873535, -28.75750160217285),
(28.792499542236328, -28.706947326660156),
(28.865726470947266, -28.761619567871094)]]
Для более длинных строк это, возможно, не самое быстрое решение, хотя я и не рассчитывал время.