In Python is de enige manier om twee lijsten samen te voegen list.extend
, waarmee de eerste lijst wordt gewijzigd. Is er een aaneenschakelingsfunctie die het resultaat retourneert zonder de argumenten te wijzigen?
Antwoord 1, autoriteit 100%
Ja: list1 + list2
. Dit geeft een nieuwe lijst die de aaneenschakeling is van list1
en list2
.
Antwoord 2, autoriteit 15%
De eenvoudigste methode is om de operator +
te gebruiken, die de aaneenschakeling van de lijsten retourneert:
concat = first_list + second_list
Een nadeel van deze methode is dat er nu twee keer zoveel geheugen wordt gebruikt . Voor zeer grote lijsten, afhankelijk van hoe je het gaat gebruiken als het eenmaal is gemaakt, itertools.chain
is misschien wel de beste keuze:
>>> import itertools
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = itertools.chain(a, b)
Hierdoor ontstaat een generator voor de items in de gecombineerde lijst, wat het voordeel heeft dat er geen nieuwe lijst hoeft te worden aangemaakt, maar u kunt toch c
gebruiken alsof het de aaneenschakeling van de twee is lijsten:
>>> for i in c:
... print i
1
2
3
4
5
6
Als uw lijsten groot zijn en efficiëntie een probleem is, dan zijn deze en andere methoden uit de itertools
-module erg handig om te weten.
Merk op dat dit voorbeeld de items in c
gebruikt, dus u zou het opnieuw moeten realiseren voordat u het kunt hergebruiken. Natuurlijk kunt u gewoon list(c)
gebruiken om de volledige lijst te maken, maar die een nieuwe lijst in het geheugen maakt.
Antwoord 3, Autoriteit 10%
concatenated_list = list_1 + list_2
Antwoord 4, Autoriteit 9%
U kunt ook sum
gebruiken, als u het een start
argument:
>>> list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9]
>>> all_lists = sum([list1, list2, list3], [])
>>> all_lists
[1, 2, 3, 'a', 'b', 'c', 7, 8, 9]
Dit werkt in het algemeen voor alles wat de +
operator heeft:
>>> sum([(1,2), (1,), ()], ())
(1, 2, 1)
>>> sum([Counter('123'), Counter('234'), Counter('345')], Counter())
Counter({'1':1, '2':2, '3':3, '4':2, '5':1})
>>> sum([True, True, False], False)
2
Met de opmerkelijke uitzondering van strings:
>>> sum(['123', '345', '567'], '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
Antwoord 5, Autoriteit 4%
U kunt altijd een nieuwe lijst maken die een resultaat is van het toevoegen van twee lijsten.
>>> k = [1,2,3] + [4,7,9]
>>> k
[1, 2, 3, 4, 7, 9]
Lijsten zijn mutable sequenties, dus ik denk dat het logisch is om de originele lijsten te wijzigen door uit te breiden of toe te voegen.
Antwoord 6, Autoriteit 2%
En als u meer dan twee lijsten moet samenvoegen:
import operator
from functools import reduce # For Python 3
list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9]
reduce(operator.add, [list1, list2, list3])
# or with an existing list
all_lists = [list1, list2, list3]
reduce(operator.add, all_lists)
Het bespaart je eigenlijk geen tijd (tussenliggende lijsten worden nog steeds gemaakt), maar leuk als je een variabel aantal lijsten hebt om af te vlakken, bijvoorbeeld *args
.
Antwoord 7
Alleen om je te laten weten:
Wanneer u list1 + list2
schrijft, roept u de __add__
methode van list1
aan, die een nieuwe lijst retourneert. op deze manier kun je ook omgaan met myobject + list1
door de methode __add__
toe te voegen aan je persoonlijke klas.