In Python ist die einzige Möglichkeit, zwei Listen zu verketten, list.extend
, die die erste Liste ändert. Gibt es eine Verkettungsfunktion, die ihr Ergebnis zurückgibt, ohne ihre Argumente zu ändern?Wie kann ich die Verknüpfung zweier Listen in Python erhalten, ohne einen zu ändern?
Antwort
Ja: list1+list2
. Dies ergibt eine neue Liste, die die Verkettung von list1
und list2
darstellt.
Sie könnten immer eine neue Liste erstellen, die sich aus dem Hinzufügen von zwei Listen ergibt.
>>> k = [1,2,3] + [4,7,9]
>>> k
[1, 2, 3, 4, 7, 9]
Listen sind wandelbar Sequenzen, damit ich es Sinn erraten macht von erweitern oder fügen Sie die ursprünglichen Listen zu ändern.
Es macht nur Sinn, die ursprünglichen Listen zu ändern, wenn Sie die unmodified Listen nicht mehr benötigen, so in diesem Fall würde es keinen Sinn machen –
Je nachdem, wie du gehst, es zu benutzen, wenn es itertools.chain
erstellt wird möglicherweise die beste Wahl:
>>> import itertools
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = itertools.chain(a, b)
Dieser einen Generator für die Elemente in der kombinierten Liste erstellt, was den Vorteil hat, dass keine neuen Liste muss erstellt werden, aber man kann immer noch verwenden c
, als ob es die Verkettung der beiden Listen waren:
>>> for i in c:
... print i
1
2
3
4
5
6
Wenn Ihre Listen sind groß und Effizienz ist ein Anliegen, dann diese und andere Methoden aus den itertools
Modul sind sehr praktisch zu wissen.
Beachten Sie, dass dieses Beispiel die Elemente in c
verbraucht. Sie müssen es also neu initialisieren, bevor Sie es wiederverwenden können. Natürlich können Sie einfach list(c)
verwenden, um die vollständige Liste zu erstellen, aber das wird eine neue Liste im Speicher erstellen.
nur sagen, dass itertools.chain zurückgibt ein Generator ... – Ant
Nur damit Sie wissen:
Wenn Sie schreiben list1 + list2
, können Sie die __add__
Methode der list1
fordern, die eine neue Liste zurück. Auf diese Weise können Sie auch mit myobject + list1
umgehen, indem Sie die __add__
Methode zu Ihrer persönlichen Klasse hinzufügen.
Und wenn Sie mehr als zwei Listen haben zu verketten:
import operator
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)
Es ist nicht wirklich sparen Sie jederzeit (Zwischenlisten werden noch erstellt), aber schön, wenn man eine variable Anzahl von Listen haben abzuflachen zB *args
.
Sie können auch sum
verwenden, wenn Sie es ein start
Argument geben:
>>> 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]
Dies ist für alles, was in der Regel funktioniert, der die +
Betreiber hat:
>>> 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
Mit der bemerkenswerten Ausnahme von 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]
In Python 3.5.2 ist 'sum' dokumentiert, um zu sagen:" Diese Funktion ist speziell für die Verwendung mit numerischen Werten vorgesehen und kann nicht-numerische Typen zurückweisen. "Ich bin mir also nicht sicher, dass' sum' sein sollte so benutzt –
Guter Fang auf der documenta tion. Komisch, dass sie nicht nur nicht numerische Werte zurückweisen würden, anstatt die Absicht in den Dokumenten zu begraben. – kevlarr
- 1. Python-Schnittmenge zweier Listen, die Duplikate enthalten
- 2. Wie Korrelation zweier Vektoren in Python erhalten
- 3. Schnittpunkt zweier Listen in Bash
- 4. Wie kann ich die Größe eines Bildes ändern, ohne die Farben in einem Bild zu ändern?
- 5. Schnittpunkt zweier Listen mit Duplikaten?
- 6. Wie kann ich die Verknüpfung für den Chrome-Browser ändern?
- 7. Verknüpfung aller Knoten zweier Typen nach IDs
- 8. Wie kann ich RegEx-Gruppen von Python ohne Matching erhalten?
- 9. Schnittpunkt zweier Listen von Variablen
- 10. Wie kann ich einen Parameter an eine Ressource übergeben, ohne die Route zu ändern?
- 11. Wie kann Socket-Client erhalten python ohne in Python
- 12. Wie zu ändern Standard lib Verknüpfung für Android Cross Toolchain (Verknüpfung ohne libC++ und libm)
- 13. Vergleich zweier Listen von Objekten in JUnit
- 14. Kann ich einfach die Summe zweier Zahlen auf Pycharm laufen lassen, ohne zuerst eine Variable zuzuordnen?
- 15. Kann ich die Root-Berechtigung erhalten, ohne vim zu verlassen?
- 16. Wie kann ich die Breite einer Zeile ändern, ohne ihre Strichbreite in inkscape zu ändern?
- 17. Wie kann ich dieses Python-Listen-Verständnis in NumPy machen?
- 18. Wie kann ich zwei geordnete Listen in Python vergleichen?
- 19. Vergleichen zweier Textdateien in Python
- 20. Wie mache ich eine Klasse zu einem Mitglied zweier verketteter Listen in Scala?
- 21. Vergleichen zweier Listen mit mehreren Bedingungen
- 22. Wie kann ich den Typ einer Klasse erhalten, ohne sie in Python zu instanziieren?
- 23. Wie kann ich die Standard-Python-Umgebung in VS2015 ändern?
- 24. Wie bekomme ich die vollständige Verknüpfung eines Bildes mit Python?
- 25. Wie kann ich TLSv1 deaktivieren, ohne den Quellcode zu ändern?
- 26. Wie kann ich DateTime.DaysInMonth ohne Wochenenden erhalten?
- 27. Wie deklariere ich ein Attribut in Python ohne einen Wert?
- 28. Wie berechne ich die Ähnlichkeit zweier Ganzzahlen?
- 29. Vergleich zweier Dokumente in Python
- 30. Wie schreibe ich einen Algorithmus, um die Gesamtzahl der Muster der Summe zweier Zahlen zu finden?
Nun, das erklärt es. Ich suchte nach einem Funktionsnamen, nicht nach einem Operator (Ja, ich weiß, dass Operatoren durch versteckte Funktionen implementiert werden.) –
Eigentlich können Sie dies tun, indem Sie eine nicht versteckte Funktion verwenden: import operator, operator.add (list1, list2) –
@ NPE Was ist, wenn ich eine beliebige Anzahl von Liste verketten möchte? Wie kann ich die Funktion definieren? Vielen Dank. – twlkyao