我试图按以下格式构建列表列表:
coordinates = [[38.768, -9.09], [[41.3092, -6.2762],[42.3092, -6.3762], [41.4092, -6.3762] ...]]
我有2个字符串列表,其中包含我想要组合的纬度和经度值(它们是对称的):
latitude = ['38.768004','41.3092,41.3059,41.3025']
longitude = ['-9.096851','-6.2762,-6.2285,-6.1809]
我使用多个循环尝试构建我的数据,此时我并不十分自信。我相信这是一个更好的方法。你会怎么做?谢谢!
我试图测试的多个循环并不是无效的,但在这里:
latitude = []
longitude = []
processes = dict
for lat in data['latitude']:
latitude.append(lat.split(','))
for lon in data['longitude']:
longitude.append(lon.split(','))
print(latitude)
coordinates = []
for i in range(len(latitude)):
# print("Coordinate number: %d" % i)
for x in range(len(latitude[i])):
processes[i] = processes[i] + 'teste'
# years_dict[line[0]].append(line[1])
答案 0 :(得分:3)
假设您有两个字符串列表,您可以使用zip
,float
和列表理解在单行中执行此操作:
coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude, longitude)]
另一方面,如果您的输入是具有逗号分隔值的单个字符串:
coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude[0].split(','), longitude[0].split(','))]
最后,如果你有两者的组合,仍然可以使用单线,但是相当难以理解。这里更容易阅读for
循环,因为你必须解压缩各个子串:
coordinates = []
for lats, lons in zip(latitude, longitude):
coordinates.extend((float(lat), float(lon)) for lat, lon in zip(lats.split(','), lons.split(',')))
如果你有兴趣,这是单行内容:
coordinates = [(float(lat), float(lon)) \
for lat, lon in zip(lats.split(','), lons.split(',')) \
for lats, lons in zip(latitude, longitude)]
此版本使用生成器表达式而不是列表推导。语法与列表推导非常相似,但不创建中间列表。使用list.extend
将项目直接放入输出中。
通常,列表推导比相应的for
循环要快得多,因为代码的工作方式很糟糕。
另外,请注意我将坐标对设置为元组而不是嵌套列表。这只是我的推荐。
答案 1 :(得分:0)
有一个名为zip
的内置函数,它将以增加的索引值连接两个列表,您可以迭代并将其分配给列表:
coordinates = []
zippedList = zip(map(lambda x: float(x), latitude), map(lambda x: float(x), longitude))
for [a,b] in zippedList:
coordinates.append([a, b])
答案 2 :(得分:0)
你可以使用这样的东西。用逗号分隔列表中的字符串,然后迭代列表。
latitude = ['38.768004,41.3092,41.3059,41.3025,41.2991,41.2957,41.2923,41.2888,41.2853,41.2818']
longitude = ['-9.096851,-6.2762,-6.2285,-6.1809,-6.1332,-6.0856,-6.0379,-5.9903,-5.9427,-5.8951']
latitude = latitude[0].split(',')
longitude = longitude[0].split(',')
print [[round(float(latitude[i]), 2), round(float(longitude[i]), 2)] for i, val in enumerate(latitude)]