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.

360voto

Karl Knechtel Punkte 55450

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

Wir erstellen zwei Listen: eine mit allen Elementen außer dem ersten und eine mit allen Elementen außer dem letzten. Die gewünschten Durchschnittswerte sind dann die Durchschnittswerte jedes Paares aus den beiden Listen. Wir verwenden 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 ganz durchzuteilen, müssen wir Fließkommazahlen verwenden. Glücklicherweise ergibt die Division einer Ganzzahl durch eine Fließkommazahl eine Fließkommazahl, also verwenden wir einfach 2.0 für unseren Divisor anstelle von 2 .

So:

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

Außerdem müssen Sie nicht bei jedem Schritt alles einer Variablen zuweisen. print sum(a) funktioniert einwandfrei.

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

145voto

Rafe Kettler Punkte 73546

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 Listenverstehen :

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

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

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

79voto

Evans Murithi Punkte 3077

Frage 2: Summieren einer Liste von ganzen Zahlen:

a = [2, 3, 5, 8]
sum(a)
# 18
# or you can do:
sum(i for i in a)
# 18

Wenn die Liste ganze Zahlen als Zeichenketten enthält:

a = ['5', '6']
# import Decimal: from decimal import Decimal
sum(Decimal(i) for i in a)

36voto

Md. Rezwanul Haque Punkte 2792

Sie können es auf diese Weise versuchen:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sm = sum(a[0:len(a)]) # Sum of 'a' from 0 index to 9 index. sum(a) == sum(a[0:len(a)]
print(sm) # Python 3
print sm  # Python 2

28voto

user4183543 Punkte 329
>>> a = range(10)
>>> sum(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> del sum
>>> sum(a)
45

Es scheint, dass sum irgendwo im Code definiert worden ist und die Standardfunktion überschreibt. Also habe ich sie gelöscht und das Problem war gelöst.

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