2016-10-13 3 views
0

Dislcaimer: Ich bin neu in PythonConcatenate zwei 2-dimensionale Listen in eine neue Liste

Ich mag würde durch die Kombination von 2 vorhandenen 2-D-Listen eine verkettete 2-D-Liste in Python erstellen. Ich beginne mit 2 Listen:

listA = [[a, b, c], [1, 2, 3]] 
listB = [[d, e, f], [4, 5, 6]] 

und ich möchte eine neue Liste machen (unter Beibehaltung listA und ListeB):

listC = [[a, b, c, d, e, f], [1, 2, 3, 4, 5, 6]] 

Wenn ich versuche, sie hinzufügen, wie mit 1-dimensionalen Listen, I erhalten:

listA + listB 
result = [[a, b, c], [1, 2, 3], [d, e, f], [4, 5, 6]] 

ich habe auch versucht:

listC = listA 
listC[0] += listB[0] 
listC[1] += listB[1] 

# This may be giving me the result I want, but it corrupts listA: 

Before: listA = [[a, b, c], [1, 2, 3] 
After: listA = [[a, b, c, d, e, f], [1, 2, 3, 4, 5, 6]] 

Was ist der richtige Weg, um eine neue Liste der gewünschten Daten zu erstellen?

Ich könnte auch mit einem Tupel arbeiten:

listC = [(a, 1), (b, 2), (c, 3), (d, 4), (e, 5), (f, 6)] 

Aber nicht wissen, das Verfahren für die entweder.

Ich benutze derzeit Python 2.7 (Raspberry Pi Lauf Raspbian Jessie), aber Python 3.4 ist verfügbar, wenn nötig.

Antwort

1

Erstellen Sie eine neue Liste, zB mit list-Verständnis

listC = [a+b for a,b in zip(listA, listB)] 
2

Es gibt ein paar Möglichkeiten sind:

listC = [listA[0] + listB[0], listA[1] + listB[1]] 

listC = [x + y for x, y in zip(listA, listB)] 

sind wahrscheinlich die beiden einfachsten

+0

Vielen Dank! Ich habe gerade gefunden, dass dies auf meiner eigenen Liste (listA) + list (listB) genau das tut, was ich brauche. – thuper

1

Hier ist eine funktionale Ansatz, wenn Sie möchten mehr erfahren:

In [13]: from operator import add 
In [14]: from itertools import starmap 

In [15]: list(starmap(add, zip(listA, listB))) 
Out[15]: [['a', 'b', 'c', 'd', 'e', 'f'], [1, 2, 3, 4, 5, 6]] 

Beachten Sie, dass starmap einen Iterator zurückgibt, wenn Sie das Ergebnis nicht in einer Liste anzeigen möchten (vielleicht, wenn Sie nur über das Ergebnis iterieren möchten), sollten Sie list() hier nicht verwenden.

+0

@ downvoter Wenn etwas falsch mit meiner Antwort ist, würde ich mich freuen, davon zu hören. – Kasramvd

+1

Upvotes für 'starmap' –

Verwandte Themen