2017-01-30 2 views
0

Ich habe eine Liste von Listen (a) und eine Liste (b), die die gleiche "Länge" haben (in diesem Fall "4 „):Wie man die Werte einer Liste von Listen und einer Liste in 1 resultierende Liste von Listen zusammenführt

a = [ 
     [1.0, 2.0], 
     [1.1, 2.1], 
     [1.2, 2.2], 
     [1.3, 2.3] 
    ] 

b = [3.0, 3.1, 3.2, 3.3] 

ich mag würde, die Werte fusionieren die folgende (c) zu erhalten:

c = [ 
     [1.0, 2.0, 3.0], 
     [1.1, 2.1, 3.1], 
     [1.2, 2.2, 3.2], 
     [1.3, 2.3, 3.3] 
    ] 

zur Zeit mache ich folgendes, es zu erreichen:

c = [] 
for index, elem in enumerate(a): 
    x = [a[index], [b[index]]] # x assigned here for better readability 
    c.append(sum(x, [])) 

mein Gefühl ist, dass es eine elegante Möglichkeit gibt, dies zu tun ...
Hinweis: die Listen sind viel größer, zur Vereinfachung habe ich sie gekürzt. sie sind immer (!) gleich lang.

+4

'[x + [y] für x, y in zip (a, b)]' – vaultah

+0

@vaultah: schön ! fügen Sie das als Antwort hinzu. Du bist der erste, der darauf reagiert ... – udo

+1

'c = [a [n] + [b [n]] für n im Bereich (len (b))]' –

Antwort

3

In python3.5 + verwenden zip() innerhalb einer Liste Verständnis und an Ort und Stelle auspacken:

In [7]: [[*j, i] for i, j in zip(b, a)] 
Out[7]: [[1.0, 2.0, 3.0], [1.1, 2.1, 3.1], [1.2, 2.2, 3.2], [1.3, 2.3, 3.3]] 

In Python 2:

In [8]: [j+[i] for i, j in zip(b, a)] 
Out[8]: [[1.0, 2.0, 3.0], [1.1, 2.1, 3.1], [1.2, 2.2, 3.2], [1.3, 2.3, 3.3]] 

Oder numpy.column_stack in numpy verwenden:

In [16]: import numpy as np 
In [17]: np.column_stack((a, b)) 
Out[17]: 
array([[ 1. , 2. , 3. ], 
     [ 1.1, 2.1, 3.1], 
     [ 1.2, 2.2, 3.2], 
     [ 1.3, 2.3, 3.3]]) 
+0

'[* j, i]' funktioniert in Python 3.5 und neuer. Warum nicht nur 'j + [i]', obwohl? – vaultah

+0

@vaultah Weil es eleganter und optimierter ist (welche Funktionen OP sucht) – Kasramvd

Verwandte Themen