zip-Funktion mit Hilfe Tupeln
Ich hoffe jemand kann mir helfen mit ein problem, ich bin stecken mit. Ich habe eine große Anzahl von Tupeln (>500), die wie folgt Aussehen:
(2,1,3,6)
(1,2,5,5)
(3,0,1,6)
(10,1,1,4)
(0,3,3,0)
Einen Ausschnitt aus meinem code lautet:
sum1 = (A,B,C,D) # creates a tuple of sums of (A,B,C,D)
mysum = map(sum, zip(A, B, C, D))
print(mysum)
Erkenne ich den oben aufgeführten code nicht richtig ist. Ich bin versucht, einen Weg finden, um alle Werte zusammen, die alle Werte von B zusammen, alle Werte von C zusammen, und alle Werte von D zusammen mit der zip-Funktion. Zum Beispiel, ich möchte etwas ausdrucken, die wie folgt aussieht:
Asum = 16
Bsum = 7
Csum = 13
Dsum = 21
Kann jemand helfen bitte? Vielen Dank für Ihre Zeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun dies mit einer beliebig großen Menge von Tupeln:
nebenbei bemerkt: in Python ist3, beachten Sie, dass zip gibt eine lazy iterierbar, der Sie immer explizit wiederum in eine Liste wie jede andere Art von iterierbar: list(zip(...))
(Dank Seganku für den Fang Fehler, die in Beispielen in einen edit-war dreimal abgelehnt, von anderen Editoren)
itertools.izip
ist wahrscheinlich besser geeignet für längere Listen.*
im*myTuples
?f(*[1,2,3])
bedeutetf(1,2,3)
. Es gibt eine Variante für Schlüsselwort-Argumente:f(**dict(x=1, y=2))
bedeutetf(x=1, y=2)
. Siehe stackoverflow.com/questions/3394835/args-and-kwargs und die stackoverflow.com/questions/36901/...Den ersten Anruf zu
zip
, kehrt die Listen - macht eine Liste der ersten Elemente, zweiten Elemente, etc.Den zweiten Aufruf
map
ruft das erste argumentsum
auf dem zweiten argument, diese Listen zurückgeben einer Liste der Ergebnisse dersum
-, die passiert werden die Summen.Es deine sets sind alle die gleiche Größe und sind Sie arbeiten in C, Python, sollten Sie erwägen,numpy. Sie können dies tun, in numpy etwa so:
Numpy wandelt die Werte in ein array und arbeitet mit Ihnen effizient mit optimierten LAPACK-Funktionen.
Leistung vergleichen, ich profilierter unter zwei Sätze von Annahmen. In der ersten, gehe ich davon aus, dass Ihre Daten gespeichert, so dass die Einfuhr in ein Numpy-array ist effizient, so dass ich nicht die Zeit, erforderlich zum konvertieren von Datensätzen in ein array. Ich verglich die Leistung der np.sum [sum(x) für x in einer zip-Datei(*sets)]. Hier sind die timeit Ergebnisse für jeden Fall:
Die Schlussfolgerung ist, dass numpy ist schneller, wenn sich Ihre input-Daten können einfach importiert und mit numpy.
Wenn Sie haben Sie alle, die Tupel in einer Liste haben, dann könnten Sie
reduce()
: