如何向空列表追加子列表以生成列表的列表?经纬度场景问题
问题解决:生成包含城市与经纬度的嵌套列表
错误原因
你触发的TypeError: list expected at most 1 argument, got 3是因为list()函数仅能接收一个可迭代参数(比如元组、字符串等),但你直接传入了三个独立参数city, latitude, longitude,不符合函数调用规则。
另外代码还有一个逻辑问题:temp_list = []被放在for循环内部,每次循环都会重新创建空列表,最终只会保留最后一个城市的数据,无法生成你需要的嵌套列表。
修正后的代码
from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent='MyApp') cities_list = ['New York', 'Los Angeles', 'Houston'] temp_list = [] # 移到循环外部,避免每次清空列表 for city in cities_list: city_coordinates = geolocator.geocode(city) # 增加判断,防止找不到城市时触发属性错误 if city_coordinates: latitude = city_coordinates.latitude longitude = city_coordinates.longitude # 直接用方括号创建包含城市名和经纬度的列表 list_element = [city, latitude, longitude] temp_list.append(list_element) print(temp_list)
简化写法(可选)
利用city_coordinates.point属性直接获取经纬度元组,简化代码:
from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent='MyApp') cities_list = ['New York', 'Los Angeles', 'Houston'] temp_list = [] for city in cities_list: city_coordinates = geolocator.geocode(city) if city_coordinates: # point返回(纬度, 经度, 海拔)元组,取前两个元素 lat, lon, _ = city_coordinates.point temp_list.append([city, lat, lon]) print(temp_list)
运行后即可得到你期望的结果:
[['New York', 40.7127281, -74.0060152], ['Los Angeles', 34.0536909, -118.242766], ['Houston', 29.7589382, -95.3676974]]
内容的提问来源于stack exchange,提问作者zeroes_ones
相关产品推荐
相关产品推荐

