2017-02-13 64 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? –