2017-02-13 19 views
0

ich eine Liste von Listen in folgendem Format gebaut versuchen:mehr Listen in einer Liste aus einer Liste von Strings

coordinates = [[38.768, -9.09], [[41.3092, -6.2762],[42.3092, -6.3762], [41.4092, -6.3762] ...]] 

Ich habe 2 Listen von Zeichenkette mit den Werten der Breite und Länge des ich möchte kombinieren (sie sind symmetrisch):

latitude = ['38.768004','41.3092,41.3059,41.3025']  
longitude = ['-9.096851','-6.2762,-6.2285,-6.1809] 

ich bin mit mehreren Schleifen versucht, meine Daten zu bauen und an diesem Punkt bin ich nicht sehr zuversichtlich. Ich glaube, es gibt einen besseren Weg. Wie würdest du das machen? Vielen Dank!

Die mehreren Schleifen i wurde zu Test versuchen, sind nicht nicht gültig, aber hier geht es:

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

Können Sie uns einige der "Mehrfachschleifen" zeigen, die Sie ausprobiert haben? – blacksite

+0

Können Sie Ihren Beitrag bearbeiten, um Ihre Liste kürzer und gültig zu machen? Es gibt merkwürdige Zitate. –

+1

Dies ist kein gültiger Python-Code. Bitte repariere. –

Antwort

3

Unter der Annahme, dass Sie zwei Listen von Zeichenketten haben, können Sie es in einem Einzeiler tun zip verwenden, float und eine Liste Verständnis:

coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude, longitude)] 

Wenn auf der anderen Seite Ihre Eingaben individuell sind Strings mit kommagetrennte Werte:

coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude[0].split(','), longitude[0].split(','))] 

Schließlich, wenn Sie eine Kombination aus zwei, ein Einzeiler noch möglich ist, wird aber ziemlich unleserlich sein. Eine for Schleife wäre einfacher, hier zu lesen, weil Sie den einzelnen Teil entpacken:

coordinates = [] 
for lats, lons in zip(latitude, longitude): 
    coordinates.extend((float(lat), float(lon)) for lat, lon in zip(lats.split(','), lons.split(','))) 

Hier ist der Einzeiler, falls Sie daran interessiert sind:

coordinates = [(float(lat), float(lon)) \ 
     for lat, lon in zip(lats.split(','), lons.split(',')) \ 
     for lats, lons in zip(latitude, longitude)] 

Diese Version einen Generator verwendet Ausdruck anstelle eines Listenverständnisses. Die Syntax ist einem Listenverständnis sehr ähnlich, eine Zwischenliste wird jedoch nicht erstellt. Die Artikel werden unter Verwendung von list.extend direkt in die Ausgabe eingefügt.

Im Allgemeinen sind Listenkomprehensionen viel schneller als die entsprechenden for Schleifen wegen der Art, wie der Code unter der Haube funktioniert.

Beachten Sie auch, dass ich die Koordinatenpaare in Tupel statt in geschachtelte Listen gemacht habe. Dies ist nur eine Empfehlung meinerseits.

0

Es gibt eine Funktion namens gebaut zip, die die beiden Listen in steigenden Indexwert verketten wird, wo Sie als iterieren und dann der Liste zuweisen:

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

Bitte formatieren Sie Ihren Code richtig. –

+1

Dies konvertiert die Zeichenfolgen nicht in Zahlen –

+0

Ich habe das behoben. :) –

0

Sie können so etwas verwenden. Teilt Strings in Listen durch Kommas und iteriert dann einfach über Listen.

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

Es ist nicht klar, was OPs tatsächliche Eingabe ist, aber wenn Ihre Interpretation korrekt ist, nett. –

+0

Warum nicht Zip verwenden? –

Verwandte Themen