2017-02-12 2 views
0

ich eine Liste mit mehreren Werten haben, die wie unten aussieht:Wie andere Art der Liste als ein in Python fusionieren

list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)] 

Sagen wir, es enthält 4 Elemente mit drei Variablen in jedem. Und ich habe noch eine Liste mit der gleichen Anzahl von Elementen, sondern eine Variable für jeden, der wie folgt aussieht:

list_B = [7,3,3,9] 

Ich habe sie zu verschmelzen versucht, und das einzige, was ich bisher bekommen kann, ist:

zip(list_A, list_B) 
>>[(('Text1',2,3),7), (('Text2',2,45),3), (('Text3',2,0),3), (('Text4',2,3),9)] 

tuple(zip(list_A, list_B) 
>>((('Text1',2,3),7), (('Text2',2,45),3), (('Text3',2,0),3), (('Text4',2,3),9)) 

Das Endergebnis sollte in diesem Format sein:

new_list = [('Text1',2,3,7),('Text2',2,45,7),('Text3',2,23,7),('Text4',2,0,9)] 
+0

'[(* x, y) für x, y in zip (list_A, list_B)]' – vaultah

+1

@ Vaultah ist diese Python 3? Du bist die Lösung ist "ungültige Syntax" in Python 2.7 – ppasler

+0

@ppasler Ich weiß, es funktioniert in Python 3.5 und neuer. – vaultah

Antwort

2

Tupeln können ein neues Tupel bilden, hinzugefügt werden, so dass Sie ein Tupel mit dem Elemente aus list_B bilden sollen:

>>> list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)] 
>>> list_B = [7,3,3,9] 
>>> [t+(e,) for t,e in zip(list_A, list_B)] 
[('Text1', 2, 3, 7), ('Text2', 2, 45, 3), ('Text3', 2, 23, 3), ('Text4', 2, 0, 9)] 

Oder in Python 3.5 + nur, können Sie tun:

>>> [(*t, e) for t, e in zip(list_A, list_B)] 
[('Text1', 2, 3, 7), ('Text2', 2, 45, 3), ('Text3', 2, 23, 3), ('Text4', 2, 0, 9)] 
+0

Danke für Ihre schnelle Antwort !! Geschätzt !! :) – htetmyet

1

Sie zip und Liste Verständnis verwenden:

list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)] 
list_B = [7,3,3,9] 

print [x + (y,) for x, y in zip(list_A, list_B)] 

Hinweis:x + y ausfällt, als tuple und int kann nicht verkettet werden

+0

Vielen Dank, Sie haben gerade meinen Tag gerettet :) – htetmyet

0

Python-Tupel haben eine Eigenschaft: Sie sind unveränderlich, aber ihre Werte können sich ändern. Dies kann vorkommen, wenn ein Tupel einen Verweis auf ein veränderbares Objekt, z. B. eine Liste, enthält.

Tuple ist unveränderlich wir es wieder nicht ändern können: So wir neu das wie folgt aus:

list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)] 
list_B = [7,3,3,9] 
new_list = [(i[0]+(i[1],)) for i in zip(list_A, list_B)] 
or 
new_list = [tuple(list(i[0])+[i[1]]) for i in zip(list_A, list_B)] 

new_list 
[('Text1', 2, 3, 7), ('Text2', 2, 45, 3), ('Text3', 2, 23, 3), ('Text4', 2, 0, 9)] 
+0

'Tupel ([j für j in i [0]] + [i [1]])' ist einfach schrecklich. Warum sollte man [j für j in i [0]] 'anstatt nur' liste (i [0]) '? Warum Tupel in Listen konvertieren, nur um sie zu verketten? Es ist auch 6-7 mal langsamer als 'i [0] + (i [1],)' und * far * weniger lesbar. – vaultah

+0

danke das ist gut –

Verwandte Themen