Die Python-Funktion sum(iterable, start=0) summiert die Elemente eines Iterables und addiert optional einen start-Wert. Sie ist O(n) und arbeitet mit allen Zahlen-Typen sowie mit allen Objekten, für die + definiert ist. Der start-Parameter ist nicht nur Default-Wert, sondern auch der Akkumulator-Typ — perfekt für Mengen-Aggregationen oder Decimal-Berechnungen.

Einleitung

sum() ist die kanonische Form, eine Sammlung von Werten zu addieren. Sie ist:

  • Idiomatisch: Pythonisch und kürzer als ein for-Loop mit Akku.
  • Stream-fähig: Funktioniert mit Generatoren ohne Materialisierung — wichtig für große Datenmengen.
  • Typ-flexibel: Mit start-Parameter lassen sich auch Objekte addieren, die + als Operator unterstützen.

Eine wichtige Ausnahme: sum() lehnt Strings ab. Wer Strings konkatenieren will, nutzt "".join() — nicht sum(strings, ""). Der Grund ist Performance: sum() mit Strings wäre O(n²) wegen der Immutability.

Für Floating-Point-genaues Summieren ist math.fsum() die richtige Wahl — es vermeidet Akkumulations-Fehler.

Syntax

Python Syntax
sum(iterable)
sum(iterable, start)
Parameter
iterable

Beliebige Iterable mit addierbaren Elementen.

start

(Optional, Default 0) Startwert. Wird vor allen Elementen addiert. Der Typ bestimmt den Akkumulator.

Rückgabewert

Die Summe der Elemente plus start. Bei leerer Iterable: start selbst (Default: 0).

Beispiele

Standard-Summierung

sum() arbeitet mit Listen, Tupeln, Generatoren — alles, was iterierbar ist:

Python Beispiel
print(sum([1, 2, 3, 4, 5]))
print(sum((10, 20, 30)))
print(sum(range(1, 101)))   # Gauß'sche Summe 1..100
Output
15
60
5050

Mit start-Wert

Der start-Wert ist nicht nur ein Offset — er bestimmt auch den Typ des Akkumulators:

Python Beispiel
from decimal import Decimal
ints = [1, 2, 3]
print(sum(ints, 100))                    # 100 + 1 + 2 + 3
print(sum([Decimal("0.1")] * 3, Decimal("0")))   # exakte Decimal-Summe
Output
106
0.3

Mit Generator-Expression

Wenn man Werte aus Daten berechnen will, ist eine Generator-Expression in sum() deutlich speicher-effizienter als eine Liste:

Python Beispiel
# Summe der Quadrate von 1 bis 10
print(sum(x * x for x in range(1, 11)))
Output
385

Strings — NICHT mit sum()

Bei Strings verbietet sum() die Anwendung explizit, weil String-Konkatenation O(n²) wäre. Die richtige Lösung ist str.join():

Python Beispiel
try:
    sum(["a", "b", "c"], "")
except TypeError as e:
    print(e)

# Korrekt:
print("".join(["a", "b", "c"]))
Output
sum() can't sum strings [use ''.join(seq) instead]
abc

Praktische Beispiele

Bedingte Aggregation: Anzahl der Elemente, die ein Prädikat erfüllen

sum() über einen Boolean-Generator zählt — kürzer als ein expliziter Counter:

Python Beispiel
nums = [3, 7, 1, 8, 4, 12, 5]
gt_5 = sum(1 for n in nums if n > 5)
print(f"{gt_5} Werte sind größer als 5")
Output
3 Werte sind größer als 5

Listen flachklopfen mit start=[]

Mit start=[] lässt sich sum() als Flatten-Operation für eine flache Liste-of-Lists missbrauchen — funktioniert, ist aber langsam (O(n²)). Für Production: itertools.chain.from_iterable().

Python Beispiel
from itertools import chain
nested = [[1, 2], [3, 4], [5]]

# sum-Trick (langsam):
flat = sum(nested, [])
print(flat)

# Schnell und idiomatisch:
flat = list(chain.from_iterable(nested))
print(flat)
Output
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

Float-genauer Summieren mit math.fsum

Beim Summieren vieler Floats können sich Rundungsfehler ansammeln — math.fsum() summiert ohne Genauigkeitsverlust:

Python Beispiel
import math
values = [0.1] * 10
print(sum(values))         # zeigt Rundungsfehler
print(math.fsum(values))   # exakt
Output
0.9999999999999999
1.0

Praktische Hinweise

  • sum() ist O(n) — schneller als manuelle Summier-Schleife.
  • Strings sind explizit verboten"".join(seq) nutzen.
  • math.fsum() für präzise Float-Summen (vermeidet Rundungsfehler).
  • start setzt den Akkumulator-Typ — perfekt für Decimal, Fraction oder eigene Klassen.
  • Verwandte Funktionen: len() (Anzahl), min()/max() (Extreme), statistics.mean() (Durchschnitt), functools.reduce() (allgemeine Aggregation).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht