Seite 1 von 1

Summieren

Verfasst: Dienstag 19. August 2008, 08:36
von fk08
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

Verfasst: Dienstag 19. August 2008, 08:44
von audax

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))

Verfasst: Dienstag 19. August 2008, 08:58
von fk08
ein wenig hilfe zu diesen eleganten zeilen wäre nicht schlecht :)
print liefert ausserdem:
<itertools.imap object at 0x85e4aac>

Verfasst: Dienstag 19. August 2008, 09:08
von n4p
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)
?

Verfasst: Dienstag 19. August 2008, 09:11
von veers
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 ;)

Verfasst: Dienstag 19. August 2008, 09:39
von CM
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

Verfasst: Dienstag 19. August 2008, 12:22
von audax
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)