簡體   English   中英

將字符串轉換為元組列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM