447 Stimmen

Summieren einer Liste von Zahlen in Python

Ich habe eine Liste von Nummern wie [1,2,3,4,5...] und ich möchte Folgendes berechnen (1+2)/2 und für die zweite, (2+3)/2 und die dritte, (3+4)/2 , und so weiter. Wie kann ich das tun?

Ich möchte die erste Zahl mit der zweiten addieren und durch 2 dividieren, dann die zweite mit der dritten addieren und durch 2 dividieren, und so weiter.

Außerdem: Wie kann ich eine Liste von Zahlen zusammenfassen?

a = [1, 2, 3, 4, 5, ...]

Ist es:

b = sum(a)
print b

um eine Nummer zu bekommen?

Das funktioniert bei mir nicht.

18voto

Vijay Punkte 978

Diese Frage wurde bereits beantwortet aquí

a = [1,2,3,4]
sum(a) 

Summe(a) ergibt 10

16voto

Andre Punkte 5301

Mit einer einfachen list-comprehension y el sum :

>> sum(i for i in range(x))/2. #if x = 10 the result will be 22.5

14voto

Ely Punkte 10427

Alle Antworten zeigten einen programmatischen und allgemeinen Ansatz. Ich schlage einen mathematischen Ansatz speziell für Ihren Fall vor. Er kann vor allem bei langen Listen schneller sein. Es funktioniert, weil Ihre Liste eine Liste von natürlichen Zahlen bis zu n :

Nehmen wir an, wir haben die natürlichen Zahlen 1, 2, 3, ..., 10 :

>>> nat_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Sie können die sum Funktion auf eine Liste:

>>> print sum(nat_seq)
55

Sie können auch die folgende Formel verwenden n*(n+1)/2 donde n ist der Wert des letzten Elements in der Liste (hier: nat_seq[-1] ), so dass Sie eine Iteration über Elemente vermeiden:

>>> print (nat_seq[-1]*(nat_seq[-1]+1))/2
55

So erzeugen Sie die Sequenz (1+2)/2, (2+3)/2, ..., (9+10)/2 können Sie einen Generator und die folgende Formel verwenden (2*k-1)/2. (beachten Sie den Punkt, der die Werte zu Fließkommazahlen macht). Bei der Erstellung der neuen Liste muss das erste Element übersprungen werden:

>>> new_seq = [(2*k-1)/2. for k in nat_seq[1:]]
>>> print new_seq
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]

Auch hier können Sie die sum Funktion auf dieser Liste:

>>> print sum(new_seq)
49.5

Sie können aber auch die folgende Formel verwenden (((n*2+1)/2)**2-1)/2 so dass Sie die Iteration über Elemente vermeiden können:

>>> print (((new_seq[-1]*2+1)/2)**2-1)/2
49.5

6voto

Zak Punkte 2651

So viele Lösungen, aber mein Favorit fehlt noch:

>>> import numpy as np
>>> arr = np.array([1,2,3,4,5])

ein Numpy-Array unterscheidet sich nicht allzu sehr von einer Liste (in diesem Anwendungsfall), außer dass man Arrays wie Zahlen behandeln kann:

>>> ( arr[:-1] + arr[1:] ) / 2.0
[ 1.5  2.5  3.5  4.5]

¡Hecho!

Erklärung

Die ausgefallenen Indizes bedeuten dies: [1:] umfasst alle Elemente von 1 bis zum Ende (und lässt somit Element 0 aus), und [:-1] sind alle Elemente außer dem letzten:

>>> arr[:-1]
array([1, 2, 3, 4])
>>> arr[1:]
array([2, 3, 4, 5])

Wenn man diese beiden addiert, erhält man ein Array, das aus den Elementen (1+2), (2+3) und so weiter besteht. Beachten Sie, dass ich durch 2.0 , nicht 2 weil Python sonst davon ausgeht, dass Sie nur ganze Zahlen verwenden, und gerundete ganzzahlige Ergebnisse liefert.

Vorteil der Verwendung von Numpy

Numpy kann sein viel schneller als Schleifen um Listen von Zahlen. Je nachdem, wie groß Ihre Liste ist, ist sie um mehrere Größenordnungen schneller. Außerdem ist es viel weniger Code, und zumindest für mich ist es einfacher zu lesen. Ich versuche, mir die Verwendung von Numpy für alle Zahlengruppen zur Gewohnheit zu machen, und es ist eine enorme Verbesserung gegenüber all den Schleifen und Schleifen-im-Schleifen, die ich sonst hätte schreiben müssen.

6voto

shashankS Punkte 1023

Der einfachste Weg, dieses Problem zu lösen:

l =[1,2,3,4,5]
sum=0
for element in l:
    sum+=element
print sum

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X