【问题标题】:Python: Fill data in a list in a tuplePython:在元组中的列表中填充数据
【发布时间】:2022-01-16 18:10:22
【问题描述】:

我需要创建一个函数来读取给定的数据并创建一个包含元组的列表,每个元组的第一个元素是机场名称,第二个和第三个元素是浮点数的地理坐标。

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 新手,所以我正在努力调试我的代码。

【问题讨论】:

  • 你的问题到底是什么?
  • 我的代码中缺少某些内容。我需要将坐标转换为浮点数,但我不知道如何。一般来说,我正在尝试创建的程序是根据机场数据计算坐标之间的距离并以公里为单位打印距离。

标签: python list tuples


【解决方案1】:

如果您希望元组的第二个和第三个元素为浮点数,则必须使用 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() 已经返回了一个列表。 进一步说明:如果您只是从坐标中剪掉字母,那么当您的机场位于不同的象限时,这可能会反过来咬您。

【讨论】:

    【解决方案2】:

    您需要考虑 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)]
    

    我更喜欢双重拆分来证明差异行/元组元素

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多