Преобразование длинной строки координат в список - PullRequest
0 голосов
/ 04 августа 2020

У меня есть длинная строка координат, разделенная запятыми.

['22.98795, 74.5936', '55.26964, 124.43686', '39.34479, 124.53541']

Как проще всего преобразовать эту строку в список координат, подобный приведенному ниже?

[(22.98795, 74.5936), (55.26964, 124.43686), (39.34479, 124.53541)]

Надеюсь, есть более простое решение, чем это

coords = "['22.98795, 74.5936', '55.26964, 124.43686', '39.34479, 124.53541']"
x = coords.split("', '")
x[0] = x[0][2:]
x[-1] = x[-1][:-2]

Ответы [ 2 ]

5 голосов
/ 04 августа 2020
>>> from ast import literal_eval
>>> coords = "['22.98795, 74.5936', '55.26964, 124.43686', '39.34479, 124.53541']"
>>> l = literal_eval(coords)
>>> l
['22.98795, 74.5936', '55.26964, 124.43686', '39.34479, 124.53541']
>>> [tuple(map(float, i.split(','))) for i in l]
[(22.98795, 74.5936), (55.26964, 124.43686), (39.34479, 124.53541)]

В качестве однострочного:

coords = [tuple(map(float, i.split(','))) for i in literal_eval(coords)]

Или, поскольку 22.98795, 74.5936 оказывается допустимым литералом для кортежа, снова используйте literal_eval для него:

coords = list(map(literal_eval, literal_eval(coords)))
0 голосов
/ 04 августа 2020

Вы можете улучшить исходный метод, используя .strip метод str, то есть:

coords = "['22.98795, 74.5936', '55.26964, 124.43686', '39.34479, 124.53541']"
x = coords.strip("[']").split("', '")
print(x)

Вывод:

['22.98795, 74.5936', '55.26964, 124.43686', '39.34479, 124.53541']

полоса удаляет начальный и конечный символы, которые она попадает аргумент. Имейте в виду, что x - это list из str, которое требует дальнейшей обработки, если вам нужно tuple s из float s.

...