【问题标题】:How to combine lists and print them out with conditional statement? Python [duplicate]如何组合列表并使用条件语句将它们打印出来? Python [重复]
【发布时间】:2019-03-01 07:52:04
【问题描述】:

好的,这里我有一个气象站列表,它们的纬度和经度坐标都在不同的列表中。

# Station names
stations = ['Hanko Russarö', 'Heinola Asemantaus', 'Helsinki Kaisaniemi', 
            'Helsinki Malmi airfield', 'Hyvinkää Hyvinkäänkylä', 'Joutsa Savenaho', 
            'Juuka Niemelä', 'Jyväskylä airport', 'Kaarina Yltöinen', 'Kauhava airfield', 
            'Kemi Kemi-Tornio airport', 'Kotka Rankki', 'Kouvola Anjala', 
            'Kouvola Utti airport', 'Kuopio Maaninka', 'Kuusamo airport', 
            'Lieksa Lampela', 'Mustasaari Valassaaret', 'Parainen Utö', 'Pori airport', 
            'Rovaniemi Apukka', 'Salo Kärkkä', 'Savonlinna Punkaharju Laukansaari', 
            'Seinäjoki Pelmaa', 'Siikajoki Ruukki', 'Siilinjärvi Kuopio airport', 
            'Tohmajärvi Kemie', 'Utsjoki Nuorgam', 'Vaala Pelso', 'Vaasa airport', 
            'Vesanto Sonkari', 'Vieremä Kaarakkala', 'Vihti Maasoja', 'Ylitornio Meltosjärvi']

# Latitude coordinates of Weather stations  
lats = [59.77, 61.2, 60.18, 60.25, 60.6, 61.88, 63.23, 62.4,
       60.39, 63.12, 65.78, 60.38, 60.7, 60.9, 63.14, 65.99,
       63.32, 63.44, 59.78, 61.47, 66.58, 60.37, 61.8, 62.94,
       64.68, 63.01, 62.24, 70.08, 64.5, 63.06, 62.92, 63.84,
       60.42, 66.53]

# Longitude coordinates of Weather stations 
lons = [22.95, 26.05, 24.94, 25.05, 24.8, 26.09, 29.23, 25.67, 
       22.55, 23.04, 24.58, 26.96, 26.81, 26.95, 27.31, 29.23, 
       30.05, 21.07, 21.37, 21.79, 26.01, 23.11, 29.32, 22.49, 
       25.09, 27.8, 30.35, 27.9, 26.42, 21.75, 26.42, 27.22, 
       24.4, 24.65]

如何将这些组合起来,以便找出列表中的哪些站点属于某个纬度、经度区域?我会在循环中做

N = len(stations)
print(N)
34

但是我如何使用该循环找出站、纬度和经度对?我是否使用某种索引方法?

【问题讨论】:

  • 好吧,标题有点混乱,因为我知道条件语句,问题是列表的配对。
  • 如果您能向我们展示您迄今为止所尝试的内容,那就太好了。即使是在stations 列表长度上的简单暴力迭代也应该允许您针对其他列表建立索引。当然还有其他更“pythonic”的方法。但看起来你甚至没有尝试过任何东西。

标签: python list loops


【解决方案1】:

你可以这样做

for combo in zip(stations,lats,lons):
    print(combo)

【讨论】:

    【解决方案2】:

    如果你知道你有相同长度的列表:

    for i in range(len(stations)):
        print(stations[i], lats[i], lons[i])
    

    回答你的第二个问题

    可以将条件语句集成到其中吗?例如:i for i in lats if i

    是的,只是在打印前添加一个条件。

    for i in range(len(stations)):
        if lats[i] > 64.5:
            print(stations[i], lats[i], lons[i])
    

    【讨论】:

    • 条件语句可以集成到这个里面吗?例如:i for i in lats if i
    【解决方案3】:

    您可以使用 zip() 函数来迭代多个可迭代对象:

    for station, lat, lon in zip(stations, lats, lons):
        print(f'Station {station} with latitude {lat} and lon {lon}')
    

    【讨论】:

      【解决方案4】:

      创建包含站点及其坐标的字典

      您可以使用内置函数zip() 组合这些列表,然后对其进行迭代:

      locations = {}
      
      for station, latitude, longitude in zip(stations, lats, lons):
         locations[station] = latitude, longitude
      

      这将产生一个具有以下格式的字典:

      locations = {
        "Hanko Russarö" : (59.77, 22.95),
        "Heinola Asemantaus" : (61.2, 26.05),
        ...
      }
      

      当然也可以写成一行

      locations = { station : (lat, lon) for station, lat, lon in zip(statios, lats, lons)}
      

      使用附加条件创建字典

      这可以结合一些条件,例如:

      locations = { station : (lat, lon) for station, lat, lon in zip(statios, lats, lons) if lat > 50}
      

      locations = {}
      
      for station, latitude, longitude in zip(stations, lats, lons):
          if latitude > 50:
              locations[station] = latitude, longitude
      

      【讨论】:

        【解决方案5】:

        这里有一些不错的解决方案,但您可能也有兴趣使用pandas DataFrames 来管理您的数据:

        import pandas as pd
        df = pd.DataFrame({
            'station': stations,
            'lat': lats,
            'lon': lons
        })
        print(df)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-05
          • 2013-07-25
          • 1970-01-01
          • 2019-10-31
          • 2022-01-04
          • 2021-06-04
          • 1970-01-01
          相关资源
          最近更新 更多