Seite 1 von 1

Summe einer Liste mit Tupeln

Verfasst: Dienstag 13. November 2007, 15:00
von jo_hb
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.

Verfasst: Dienstag 13. November 2007, 15:06
von jo_hb
Oh, hehe - smilies sind in der originalliste nicht drin... :roll:

Verfasst: Dienstag 13. November 2007, 15:08
von BlackVivi
Ö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))

Verfasst: Dienstag 13. November 2007, 15:09
von Rebecca
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

Verfasst: Dienstag 13. November 2007, 15:15
von jo_hb
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.

Verfasst: Dienstag 13. November 2007, 15:18
von HWK
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

Verfasst: Dienstag 13. November 2007, 15:19
von BlackVivi
Oh, ich hatte es falsch gelesen :-/ Tut mir leid. Aber HWK hat's ja schon korrigiert :)