Как разделить строковые координаты на 2 списка: Широта и долгота

#python #list #tuples

Вопрос:

В настоящее время у меня есть список координат строкового кортежа: широта и долгота. Я хочу разделить этот список координат кортежа на список широты и список долготы. Как мне этого добиться? Я попытался использовать функцию zip, но это не работает. Мой текущий код приведен ниже.

 latlon_ = [x[0] for x in latlon]
latlon_
 

Это возвращает:

 ['(39.36356356, -76.53434457)',
 '(39.27426334, -76.54542274)',
 '(39.36461879, -76.56234642)',
 '(39.26932875, -76.60509948)',
 '(39.30447891, -76.61359834)',
 '(39.30411637, -76.61357519)',
 '(39.33636159, -76.6802207)',]
 

И я хотел бы иметь 2 списка: долгота и широта.

Комментарии:

1. Можете ли вы поделиться оригинальным списком?

2.[(‘(39.36356356, -76.53434457)’,), (‘(39.27426334, -76.54542274)’,), (‘(39.36461879, -76.56234642)’,), ]

Ответ №1:

 source_list=['(39.36356356, -76.53434457)',
 '(39.27426334, -76.54542274)',
 '(39.36461879, -76.56234642)',
 '(39.26932875, -76.60509948)',
 '(39.30447891, -76.61359834)',
 '(39.30411637, -76.61357519)',
 '(39.33636159, -76.6802207)',]

latitude=[x.split(',')[0][1:] for x in source_list]
longitude=[x.split(',')[1][2:].replace(')','') for x in source_list]

print('latitude: ', latitude)
print('longitude:', longitude)
 

Выход:

 latitude:  ['39.36356356', '39.27426334', '39.36461879', '39.26932875', '39.30447891', '39.30411637', '39.33636159']
longitude: ['76.53434457', '76.54542274', '76.56234642', '76.60509948', '76.61359834', '76.61357519', '76.6802207']
 

Ответ №2:

Я бы сначала применил регулярное выражение, подобное этому:

 import re
pattern = re.compile("d [.]d ")
latlon_ = [re.findall(pattern, tpl) for tpl in latlon_]
 

Затем у вас есть latlon_ формат, с которым вы можете работать, и применить еще два понимания списка для извлечения долготы и широты в виде поплавков:

 long = [float(tpl[0]) for tpl in latlon_]
lat = [float(tpl[1]) for tpl in latlon_]
 

Комментарии:

1. С помощью некоторых настроек вы можете понять только один список. aa = [] bb = [] latlon_ = [re.findall(pattern, tpl) for tpl in list_] [(aa.append(ll), bb.append(lt)) for ll, lt in latlon_] print(aa, bb)

Ответ №3:

 latlon = [('(39.36356356, -76.53434457)',), ('(39.27426334, -76.54542274)',), ('(39.36461879, -76.56234642)',), ]
lat,lon = list(zip(*[eval(x[0]) for x in latlon]))
print(f'lat = {list(lat)}nlon = {list(lon)}')
 

С принтами:

 lat = [39.36356356, 39.27426334, 39.36461879]
lon = [-76.53434457, -76.54542274, -76.56234642]