Frage Wie verkette ich zwei Listen in Python?


Wie verknüpfe ich zwei Listen in Python?

Beispiel:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

Erwartetes Ergebnis:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

1637
2017-11-12 07:04


Ursprung


Antworten:


Du kannst den ... benutzen + Betreiber, um sie zu kombinieren:

listone = [1,2,3]
listtwo = [4,5,6]

mergedlist = listone + listtwo

Ausgabe:

>>> mergedlist
[1,2,3,4,5,6]

2694
2017-11-12 07:07



Es ist auch möglich, einen Generator zu erstellen, der einfach über die Elemente in beiden Listen iteriert. Dadurch können Sie Listen (oder beliebige iterierbare) für die Verarbeitung aneinanderreihen, ohne die Elemente in eine neue Liste zu kopieren:

import itertools
for item in itertools.chain(listone, listtwo):
   # do something with each list item

214
2017-11-12 20:01



Sie können Sets verwenden, um eine zusammengeführte Liste eindeutiger Werte zu erhalten

mergedlist = list(set(listone + listtwo))

154
2017-09-20 08:43



Du könntest auch benutzen extend um ein hinzuzufügen list füge das Ende eines anderen hinzu:

listone = [1,2,3]
listtwo = [4,5,6]
mergedlist = []
mergedlist.extend(listone)
mergedlist.extend(listtwo)

99
2018-02-25 15:13



Python >= 3.5 Alternative: [*l1, *l2]

Obwohl dies eine alte Antwort ist, wurde eine andere Alternative durch die Annahme von PEP 448 das verdient Erwähnung.

Die PEP, betitelt Zusätzliche Unpacking-Verallgemeinerungen, im Allgemeinen einige syntaktische Einschränkungen bei der Verwendung der Sterne reduziert * Ausdruck in Python; damit können zwei Listen (gilt für jedes iterable) nun auch mit

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]

#unpack both iterables in a list literal
>>> joinedList = [*l1, *l2]
>>> print(joinedList)
[1, 2, 3, 4, 5, 6]

Diese Funktionalität wurde für Python definiert 3.5 Es wurde nicht zu vorherigen Versionen in der 3.x Familie. In nicht unterstützten Versionen a SyntaxError wird erhöht werden.

Wie auch bei den anderen Ansätzen erstellt als flache Kopie der Elemente in den entsprechenden Listen.


Das nach oben zu diesem Ansatz ist, dass Sie wirklich keine Listen benötigen, um es durchzuführen, alles, was iterierbar ist, wird tun. Wie in der PEP angegeben:

Dies ist auch nützlich als eine besser lesbare Möglichkeit, iterables in a zu summieren   Liste, wie my_list + list(my_tuple) + list(my_range) Das ist jetzt   gleichwertig [*my_list, *my_tuple, *my_range].

Also während der Zugabe mit + würde eine erhöhen TypeError wegen Typinkongruenz:

l = [1, 2, 3]
r = range(4, 7)
res = l + r

Das Folgende wird nicht:

res = [*l, *r]

weil es zuerst den Inhalt der Iterablen entpackt und dann einfach ein list aus dem Inhalt.


94
2017-11-12 07:07



Das ist ziemlich einfach, ich denke, es wurde sogar in der gezeigt Anleitung:

>>> listone = [1,2,3]
>>> listtwo = [4,5,6]
>>>
>>> listone + listtwo
[1, 2, 3, 4, 5, 6]

57
2018-03-05 09:15



Du könntest einfach das benutzen + oder += Betreiber wie folgt:

a = [1, 2, 3]
b = [4, 5, 6]

c = a + b

Oder:

c = []
a = [1, 2, 3]
b = [4, 5, 6]

c += (a + b)

Wenn Sie möchten, dass die Werte in der zusammengeführten Liste eindeutig sind, können Sie Folgendes tun:

c = list(set(a + b))

33
2017-10-09 23:21



Diese Frage fragt direkt nach dem Beitritt zu zwei Listen. Es ist jedoch ziemlich hoch in der Suche, auch wenn Sie nach einer Möglichkeit suchen, vielen Listen beizutreten (einschließlich des Falls, wenn Sie Nulllisten beitreten). Betrachten Sie diesen allgemeineren Ansatz:

a = [[1,2,3], [4,5,6], [7,8,9]]
reduce(lambda c, x: c + x, a, [])

Wird ausgegeben:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Beachten Sie, dass dies auch korrekt funktioniert, wenn a ist [] oder [[1,2,3]].

Dies kann jedoch effizienter mit itertools:

a = [[1,2,3], [4,5,6], [7,8,9]]
list(itertools.chain(*a))

Wenn Sie keine benötigen list, aber nur ein iterables, weglassen list().

Aktualisieren

Alternative von Patrick Collins in den Kommentaren vorgeschlagen könnte auch für Sie arbeiten:

sum(a, [])

29
2018-02-05 05:01



Es ist erwähnenswert, dass die itertools.chain Funktion akzeptiert variable Anzahl von Argumenten:

>>> l1 = ['a']; l2 = ['b', 'c']; l3 = ['d', 'e', 'f']
>>> [i for i in itertools.chain(l1, l2)]
['a', 'b', 'c']
>>> [i for i in itertools.chain(l1, l2, l3)]
['a', 'b', 'c', 'd', 'e', 'f']

Wenn ein Iterable (Tupel, Liste, Generator, etc.) die Eingabe ist, die from_iterable Klassenmethode kann verwendet werden:

>>> il = [['a'], ['b', 'c'], ['d', 'e', 'f']]
>>> [i for i in itertools.chain.from_iterable(il)]
['a', 'b', 'c', 'd', 'e', 'f']

20
2017-07-21 00:53



Mit Python 3.3+ können Sie verwenden Ausbeute von:

listone = [1,2,3]
listtwo = [4,5,6]

def merge(l1, l2):
    yield from l1
    yield from l2

>>> list(merge(listone, listtwo))
[1, 2, 3, 4, 5, 6]

Oder wenn Sie eine beliebige Anzahl von Iteratoren unterstützen wollen:

def merge(*iters):
    for it in iters:
        yield from it

>>> list(merge(listone, listtwo, 'abcd', [20, 21, 22]))
[1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 'd', 20, 21, 22]

19
2017-07-07 13:30



Wenn Sie die beiden Listen in sortierter Form zusammenführen möchten, können Sie die Zusammenführungsfunktion aus der heapq-Bibliothek verwenden.

from heapq import merge

a = [1,2,4]
b = [2,4,6,7]

print list(merge(a,b))

14
2017-10-20 09:32