[英]Convert a String into a List of Tuples
我想寫一個 function 接收一個字符串作為參數,然后將其轉換為一個元組列表。
帶有虛擬數據的字符串:
locations_data = """
NewYork 37.936389°N 23.947222°E
London 37.936389°N 23.947222°E
Berlin 37.936389°N 23.947222°E
Milano 37.936389°N 23.947222°E
到目前為止,我知道我必須將字符串拆分器循環°E
,但是當我必須分隔每個“行”數據時我會感到困惑。
for i in locations_data.split("°E")
所需的 output:
locations = [
(NewYork, 37.936389, 23.947222),
(London, 37.936389, 23.947222),
(Berlin, 37.936389, 23.947222),
(Milano, 37.936389, 23.947222)
]
使用split()
將每行拆分為 3 個字段。 刪除度數符號並將它們轉換為浮點數,然后將它們放入元組中。
import re
locations = []
for line in locations_data.splitlines():
city, lat, lon = line.split()
lat = float(re.sub(r'°[NS]$', '', lat))
lon = float(re.sub(r'°[EW]$', '', lon))
locations.append((city, lat, lon))
我會使用正則表達式。 然后你有幾個選擇:
re.split
:
import re
[re.split('(?:°[NSEW])?\s+', s) for s in locations_data.splitlines()]
re.findall
:
import re
re.findall('(\w+)\s+([\d.]+).. ([\d.]+)..', locations_data)
output:
[('NewYork', '37.936389', '23.947222'),
('London', '37.936389', '23.947222'),
('Berlin', '37.936389', '23.947222'),
('Milano', '37.936389', '23.947222')]
有花車:
[(a, float(b), float(c))
for a,b,c in re.findall('(\w+)\s+([\d.]+).. ([\d.]+)..', locations_data)]
output:
[('NewYork', 37.936389, 23.947222),
('London', 37.936389, 23.947222),
('Berlin', 37.936389, 23.947222),
('Milano', 37.936389, 23.947222)]
骯臟但有效
lines = locations_data.split('\n')
locations = []
for line in lines:
if len(line) > 0:
my_tuple = ()
for val in line.split(' '):
if len(val) > 0:
my_tuple = my_tuple + (val.replace('°N','').replace('°E',''),)
locations.append(my_tuple)
print(locations)
# [('NewYork', '37.936389', '23.947222'), ('London', '37.936389', '23.947222'), ('Berlin', '37.936389', '23.947222'), ('Milano', '37.936389', '23.947222')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.