2017-02-13 29 views
0

我想建名单的格式如下列表的列表中创建多个列表:列表里面从字符串

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

你能告诉我们一些你试过的“多重循环”吗? – blacksite

+0

您是否可以编辑自己的帖子以使您的列表更短且有效?有奇怪的引号。 –

+1

这是无效的Python代码。请修复。 –

回答

3

假设你有一个字符串的两个列表,您可以使用zipfloat和列表理解这样做在一个班轮:

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循环要快得多,因为代码在底层工作的方式。

另外,请注意,我将坐标对转换为元组而不是嵌套列表。这只是我的一个建议。

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]) 
+0

请正确格式化您的代码。 –

+1

这不会将字符串转换为数字 –

+0

我已修复该问题。 :) –

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)] 
+0

目前尚不清楚OP的实际输入是什么,但如果你的解释是正确的,那就很好。 –

+0

为什么不使用zip? –