Summieren einer Liste von Zahlen in Python

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

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

Und wie kann ich eine Liste von Zahlen summieren?

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

Ist es:

b = sum(a)
print b

um eine Zahl zu erhalten?

Das funktioniert bei mir nicht.

Frage 1: Sie wollen also (Element 0 + Element 1) / 2, (Element 1 + Element 2) / 2, ... usw.

Wir erstellen zwei Listen: eine mit jedem Element außer dem ersten und eine mit jedem Element außer dem letzten. Die gesuchten Durchschnitte sind dann die Durchschnitte jedes Paares aus den beiden Listen. Wir benutzen zip, um Paare aus zwei Listen zu nehmen.

Ich nehme an, dass Sie Dezimalzahlen im Ergebnis sehen wollen, obwohl Ihre Eingabewerte ganze Zahlen sind. Standardmäßig führt Python eine ganzzahlige Division durch: Der Rest wird verworfen. Um die Dinge ganz durchzuteilen, müssen wir Fließkommazahlen verwenden. Glücklicherweise ergibt die Division einer Ganzzahl durch eine Fließkommazahl eine Fließkommazahl, so dass wir statt "2" einfach "2.0" als Divisor verwenden.

Also:

averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]

Frage 2:

Diese Verwendung von sum sollte gut funktionieren. Das Folgende funktioniert:

a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45

Sie müssen auch nicht alles bei jedem Schritt einer Variablen zuweisen. print sum(a) funktioniert genauso gut.

Sie müssen genauer beschreiben, was Sie geschrieben haben und warum es nicht funktioniert.

Kommentare (4)

Summenliste der Zahlen:

sum(list_of_nums)

Berechnung der Hälfte von n und n - 1 (wenn ich das Muster richtig verstanden habe), unter Verwendung einer list comprehension:

[(x + (x - 1)) / 2 for x in list_of_nums]

Summe benachbarter Elemente, z.B. ((1 + 2) / 2) + ((2 + 3) / 2) + ... mit reduce und lambdas

reduce(lambda x, y: (x + y) / 2, list_of_nums)
Kommentare (3)

Versuchen Sie, eine Liste zu verstehen. Etwa so:

new_list = [(old_list[i] + old_list[i+1])/2 for i in range(len(old_list-1))]
Kommentare (2)