Habe ich jetzt:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
Wünsche ich mir:
[1, 2, 3]
+ + +
[4, 5, 6]
|| || ||
[5, 7, 9]
Einfach ein element-Weise addition zweier Listen.
Kann ich sicher Durchlaufen der beiden Listen, aber ich will es nicht tun.
Was ist die meisten Pythonic way tun?
InformationsquelleAutor der Frage Sibbs Gambling | 2013-09-10
Verwenden
map
mit- operator.add
:oder
zip
mit einer Liste Verständnis:Timing-Vergleiche:
InformationsquelleAutor der Antwort Ashwini Chaudhary
Die anderen Gaben Beispiele, wie dies in reinem python. Wenn Sie möchten, tun Sie dies mit arrays mit 100.000 Elementen, die Sie verwenden sollten, numpy:
Tun, die element-Weise addition ist jetzt so trivial, wie
genau wie in Matlab.
Timing zu vergleichen mit Ashwini schnellsten version:
So ist dies ein Faktor 25 schneller! Aber das benutzen, was zu Ihrer situation passen. Für ein einfaches Programm, Sie wahrscheinlich nicht wollen, installieren Sie numpy, so verwenden Sie ein standard-python (und ich finde das Henry ' s-version, die die meisten pythonic). Wenn Sie in schweren Zahlenverarbeitung durchführen, lassen
numpy
tun, die schweres heben. Für die speed-freaks: es scheint, dass die numpy-Lösung ist schneller ab etwan = 8
.InformationsquelleAutor der Antwort Bas Swinckels
InformationsquelleAutor der Antwort Henry Gomersall
Als beschrieben, die von anderen, einen schnellen und Platz sparenden Lösung mit numpy (np) mit integrierten Vektor-manipulation-Fähigkeit:
1. Mit Numpy
2. Mit built-ins
2.1 Lambda -
Bemerken, dass die map () - unterstützt mehrere Argumente.
2.2 zip-und list-comprehension
InformationsquelleAutor der Antwort Ralf
Vielleicht "die meisten pythonic way" sollte auch mit dem Fall, wo Liste1 und liste2 sind nicht die gleiche Größe haben. Die Anwendung einiger dieser Methoden wird ruhig Ihnen eine Antwort geben. Die numpy-Ansatz wird Sie wissen lassen, die meisten wahrscheinlich mit einem ValueError.
Beispiel:
Dem Ergebnis, Sie wollen, wenn dies in einer Funktion, in der Ihr problem?
InformationsquelleAutor der Antwort Fred Mitchell
Diese wird die Arbeit für 2 oder mehr Listen; Iteration durch die Liste der Listen, aber mit numpy neben befassen sich mit den Elementen jeder Liste
InformationsquelleAutor der Antwort litepresence
Use map mit lambda-Funktion:
InformationsquelleAutor der Antwort Peaters
Ich habe nicht getimed, aber ich vermute, das wäre ziemlich schnell:
InformationsquelleAutor der Antwort litepresence
Es ist einfacher zu verwenden
numpy
aus meiner Meinung nach:Ergebnisse:
Ausführliche Informationen zum parameter, überprüfen Sie hier: numpy.hinzufügen
InformationsquelleAutor der Antwort Ludwig Zhou
Wenn Sie brauchen, um zu behandeln Listen von verschiedenen Größen, keine Sorge! Die wunderbare itertools Modul hat Sie bedeckt:
In Python 2,
zip_longest
heißtizip_longest
.Siehe auch dieser relevante Antwort und Kommentar auf der anderen Frage.
InformationsquelleAutor der Antwort jjst
InformationsquelleAutor der Antwort wgr
Dies ist einfach mit
numpy.add()
Siehe doc hier
Wenn Sie möchten, dass der Empfänger einer python-Liste:
InformationsquelleAutor der Antwort Eduardo Basílio
Obwohl Sie die eigentliche Frage nicht wollen, um die Liste Durchlaufen zu generieren, mit dem Ergebnis, aber alle Lösungen, die vorgeschlagen wurden, die genau das tut, unter-neath der Haube!
Aktualisieren: Sie können nicht fügen Sie zwei Vektoren an, ohne sich in alle Vektor-Elemente. So, die Algorithmische Komplexität der meisten dieser Lösungen sind Big-O(n). Wobei n die dimension des Vektors.
So, aus einer algorithmischen Sicht mit einer for-Schleife iterativ generieren das daraus resultierende Liste ist logisch und pythonic zu. Doch auch diese Methode nicht den overhead der Berufung oder importieren jede weitere Bibliothek.
Den timings, die werden gezeigt/besprochen, hier sind die system-und implementierungsabhängig und kann keine zuverlässige Kennzahl zur Messung der Effizienz der operation. In jedem Fall, die big O Komplexität der Vektor-addition ist linear, d.h. O(n).
InformationsquelleAutor der Antwort Ehsan