Summieren

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
fk08
User
Beiträge: 37
Registriert: Donnerstag 20. März 2008, 13:46

Also langsam verstehe ich die Welt nicht mehr :)
Folgendes Problem:

Ich habe eine Liste der Form:

1079 1079
1190 1191
1059 1058

Die Indizierung klappt:

number[0][0] = 1079
number[0][1] = 1079
number[1][0] = 1190

Nun möchte ich über die Spalten summieren, also
erste summation = 1079+1190+1059
...

Code: Alles auswählen

su = []
summe_total = []
for j in range(0,2): #j läuft über die einzelnen spalten
	for i in range(0,3):#innere schleife erzeugt die spalte
		x = number[i][j]
		su +=[x]
	summe = sum(su)	
	summe_total += [summe]
print summe_total liefert : [3328.0, 6656.0]
d.h der zweite eintrag ist die summe über alle elemente.
man müsste su sozusagen zu null machen in der inneren schleife,
aber ich weiß nicht wie.

es gibt bestimmt eine elegantere lösung, vielen dank für jegliche hilfe
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Code: Alles auswählen

from itertools import imap
import operator as op


numbers = [
    [1079, 1079],
    [1190, 1191],
    [1059, 1058], 
]

first_column = op.itemgetter(0)

print sum(imap(first_column, numbers))
fk08
User
Beiträge: 37
Registriert: Donnerstag 20. März 2008, 13:46

ein wenig hilfe zu diesen eleganten zeilen wäre nicht schlecht :)
print liefert ausserdem:
<itertools.imap object at 0x85e4aac>
n4p
User
Beiträge: 55
Registriert: Dienstag 10. Juni 2008, 11:05

Oder mit deiner Lösung in etwa so:

Code: Alles auswählen

summe_total = [] 
for j in range(0,2): #j läuft über die einzelnen spalten
    su=0
    for i in range(0,3):#innere schleife erzeugt die spalte 
        x = number[i][j] 
        su +=x
    summe_total.append(su)
?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

fk08 hat geschrieben:ein wenig hilfe zu diesen eleganten zeilen wäre nicht schlecht :)
print liefert ausserdem:
<itertools.imap object at 0x85e4aac>
Da hat der gute audax ja auch einen Fehler gemacht.

sum(x[0] for x in numbers) macht das was sein code hätte machen sollen.

Dein Problem verstehe ich leider nicht ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Und von mir die obligatorische numpy-Einwendung ;-):

Code: Alles auswählen

from numpy import array
x = array([[1079, 1079], [1190, 1191], [1059, 1058]])
x[:,0] # erste Spalte
sum(x[:,0]) # deren Summe
# oder auch
x[:,0].sum()
Der Witz dabei ist, dass das a) auch bei grossen arrays schnell ist und beliebig viele Spalten und Dimensionen unterstützt.

Gruß,
Christian
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

veers hat geschrieben:
fk08 hat geschrieben:ein wenig hilfe zu diesen eleganten zeilen wäre nicht schlecht :)
print liefert ausserdem:
<itertools.imap object at 0x85e4aac>
Da hat der gute audax ja auch einen Fehler gemacht.

sum(x[0] for x in numbers) macht das was sein code hätte machen sollen.

Dein Problem verstehe ich leider nicht ;)
Wie, ein Fehler?
Bei mir läuft der Code perfekt durch, auf Python 2.5.

die GE-Variante würde ich übrigens eher so schreiben:

Code: Alles auswählen

sum(first for first, second in numbers)
Antworten