2016-11-09 2 views
0

Ich habe eine einfache Frage für Python:Python eingebaut Summenfunktion

sagen, ich habe A = [1,2,3,4], und ich mag Elemente aus dem zweiten und dritten Eintrag summieren. Wie kann ich das in Python machen? sum(A[i] for i in [1:2]) = 2 + 3 = 6 funktioniert nicht.

+0

'A [1] + A [2]' wird gut funktionieren. Zusätzlich, '2 + 3' summiert sich zu" 5 "und nicht zu" 6 "wie in deiner Frage. – Jan

+0

A [1: 2] hat nur ein einziges Element, A [1]. – RemcoGerlich

+5

'Summe (A [1: 3])'? Die untere Scheibe ist inklusive, die obere Scheibe ist exklusiv. –

Antwort

2

Das ist eine ungültige Syntax, können Sie verwenden:

sum(A[i] for i in [1,2]) 

oder:

sum(A[i] for i in range (1,3)) 

oder mit Scheibe:

sum(i for i in A[1:3]) 

Last-Index in der Scheibe ist nicht enthalten.

(oder wie ein Kommentar unten sagt, einfacher ist: sum (A [1: 3])

Der Grund Code ungültig ist, in Scheiben schneiden nicht allein sein kann, es muss gesagt werden, es ist eine Scheibe. B. A [1: 3] ist eine Scheibe von A, aber [1: 3] sagt nichts über Elemente dessen, was es brauchen sollte. Das zweite Problem ist die Indizierung, wie ich bereits erwähnt habe. Die letzte ist nicht enthalten.

+2

Noch einfacher: Summe (A [1: 3]) –

1
sum(A[1:3]) 

A [1: 3] bedeutet Liste von Index-Slicing 1 bis 3 [3 exluded]

Lesen Sie über das Slicing der Liste.

Beste Wünsche!

0

Sie können so etwas wie dies versuchen:

sum([A[item] for item in [1,3] ]) 

Ich glaube nicht, dass es eine einfachere Lösung ist.

+0

Leider hat ein Kommentar ohne Kommentar keinen Sinn. –

+1

Sie benötigen kein Listenverständnis dafür – MMF

+0

Simpler: sum (A [1: 3]) –

3

Ihr Code funktioniert nicht, weil [1:2] ist nicht ein juristischer Ausdruck auf seinem eigenen in Python:

[1:2] 
    ^
SyntaxError: invalid syntax 

Das Update

sum(i for i in A[1:3]) 

arbeiten.

Die bessere Lösung

sum(A[1:3]) 

in an informal introduction to python auf Liste Slicing Lesen up

0

Wenn Sie einen zusammenhängenden Bereich von Elementen aus der Liste möchten, verwenden Sie eine Scheibe:

sum(A[1:4]) # A[1] + A[2] + A[3] 

Wenn die Satz von Indizes ist nicht zusammenhängend, verwenden Sie eine Liste Verständnis

indices=[1,5,7] 
sum(A[i] for i in indices) 

oder operator.itemgetter:

from operator import itemgetter as ig 
indices=[1,5,7] 
sum(ig(*indices)(A)) 

-

Es ist eine Schande, vielleicht, dass die list Typ nicht ein Tupel als Index annehmen können, A[1,5,7] als [A[1], A[5], A[7]] anstelle eines Typs Fehler Behandlung .

Verwandte Themen