Summe einer Liste mit Tupeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Hallo,
noch eine kurze Frage: ich habe eine Liste wie die folgende:
[(7, 137, 35), (7, 134, 31), (7, 141, 31), (7, 139, 37), (7, 142, 33), (7, 137, 37), (7, 144, 37), (7, 143, 37), (6, 143, 38), (6, 143, 33), (6, 143, 38), (7, 150, 37), (6, 143, 37), (8, 144, 41), (2, 143, 38), (5, 147, 38), (7, 146, 37), (8, 152, 37), (6, 151, 40)]

...und möchte nun daraus ein Tupel machen, in dem jeweils die Summen stehen, also (7+7+7+7+..., 137+134+141+139..., 35+31+31+37+...).
Weil ich das in meinem Programm ziemlich oft machen muss bräuchte ich eine schnelle Methode (und will daher gar nicht erst anfangen mit for i in liste, weil's da doch bestimmt schnellere Methoden gibt.)

Vielen Dank schonmal für eure Hilfe,
Jo

Edit (Leonidas): Smileys entfernt.
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Oh, hehe - smilies sind in der originalliste nicht drin... :roll:
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Öhm... Nur mal so'n Vorschlag. Gibts bestimmt auch was in Itertools und so, aber...

Code: Alles auswählen

foo = [(7, 137, 35), (7, 134, 31), (7, 141, 31), (7, 139, 37), (7, 142, 33), (7, 137, 37)]
bar = tuple(map(sum, foo))
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Eine Moeglichkeit:

Code: Alles auswählen

>>> l = [(7, 137, 35), (7, 134, 31), (7, 141, 31)]
>>> print sum(map(lambda x: x[0], l))
21
>>> print sum(map(lambda x: x[1], l))
412
>>> print sum(map(lambda x: x[2], l))
97
EDIT: Oder in einer Zeile:

Code: Alles auswählen

>>> a = tuple(sum(map(lambda x: x[i], l)) for i in range(3))
>>> a
(21, 412, 97)
Mmh, ob das die Lesbarkeit foerdert? :D
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Blackvivi, das ist zwar eine schöne Lösung aber leider nicht das was ich brauche: Meine Liste ist

[(7, 137, 35), (7, 134, 31), (7, 141, 31), (7, 139, 37), (7, 142, 33), (7, 137, 37), (7, 144, 37), (7, 143, 37), (6, 143, 38), (6, 143, 33), (6, 143, 38), (7, 150, 37), (6, 143, 37), (8, 144, 41), (2, 143, 38), (5, 147, 38), (7, 146, 37), (8, 152, 37), (6, 151, 40)]

Und ich brauche nicht

(7+137+35, 7+134+31, ...)

sondern

(7+7+7+7+..., 137+134+141+139..., 35+31+31+37+...).

Rebecca, das wäre schon richtig, aber gibt es keine Möglichkeit das sozusagen mit einer 'operation' zu machen?

EDIT:
Oh, ein EDIT! :)

Edit (Leonidas): Smileys entfernt.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

BlackVivi hat geschrieben:

Code: Alles auswählen

foo = [(7, 137, 35), (7, 134, 31), (7, 141, 31), (7, 139, 37), (7, 142, 33), (7, 137, 37)]
bar = tuple(map(sum, foo))
Nicht ganz:

Code: Alles auswählen

bar = tuple(map(sum, zip(*foo)))
MfG
HWK
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Oh, ich hatte es falsch gelesen :-/ Tut mir leid. Aber HWK hat's ja schon korrigiert :)
Antworten