我需要創建一個函式來讀取給定的資料并創建一個包含元組的串列,每個元組的第一個元素是機場名稱,第二個和第三個元素是浮點數的地理坐標。
airport_data = """
Alexandroupoli 40.855869°N 25.956264°E
Athens 37.936389°N 23.947222°E
Chania 35.531667°N 24.149722°E
Chios 38.343056°N 26.140556°E
Corfu 39.601944°N 19.911667°E
Heraklion 35.339722°N 25.180278°E"""
airports = []
import re
airport_data1 = re.sub("[°N@°E]","",airport_data)
def process_airports(string):
airports_temp = list(string.split())
airports = [tuple(airports_temp[x:x 3]) for x in range(0, len(airports_temp), 3)]
return airports
print(process_airports(airport_data1))
到目前為止,這是我的代碼,但我是 Python 新手,所以我正在努力除錯我的代碼。
uj5u.com熱心網友回復:
如果希望元組的第二個和第三個元素是浮點數,則必須使用 float() 函式對其進行轉換。一種方法是在串列理解中創建一個帶有圓括號的元組并在那里轉換值:
def process_airports(string):
airports_temp = string.split()
airports = [(airports_temp[x], float(airports_temp[x 1]), float(airports_temp[x 2])) for x in range(0, len(airports_temp), 3)]
return airports
這會產生一個非常笨拙的運算式,所以也許這個問題可以通過經典的 for 回圈來解決,更具可讀性。
另請注意, slpit() 已經回傳一個串列。進一步說明:如果您只是從坐標中剪掉字母,當您的機場位于不同的象限時,這可能會反過來咬您。
uj5u.com熱心網友回復:
您需要考慮經度和緯度的 N/S、W/E。也許
def process_airports(string):
airports = []
for line in string.split('\n'):
if not line: continue
name, lon, lat = line.split()
airports.append((name,
float(lon[:-2]) * (1 if lon[-1] == "N" else -1),
float(lat[:-2]) * (-1 if lat[-1] == "E" else 1)
))
return airports
>>> process_airports(airport_data1)
[('Alexandroupoli', 40.855869, -25.956264), ('Athens', 37.936389, -23.947222), ('Chania', 35.531667, -24.149722), ('Chios', 38.343056, -26.140556), ('Corfu', 39.601944, -19.911667), ('Heraklion', 35.339722, -25.180278)]
我更喜歡雙重拆分來證明差異行/元組元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413352.html
標籤:
上一篇:列印給定陣列的所有子陣列
