Skip to content

Vergleiche

Häufiges Element der Verwirrung bei Programmierneulingen ist der Vergleich von Variableninhalten. Eine Zuweisung der Inhalte erfolgt mit = (einem einfachen Gleichheitszeichen), während ein Vergleich mit == (zwei Gleichheitszeichen) erfolgt - anders als in der Mathematik.

a = 5
b = 10-5
a == b # Ergibt True

Für Zahlentypen entsprechen die Vergleichsoperatoren dem üblichen Verständnis:

Operator Bedeutung Beispiel für wahr Beispiel für falsch
== Gleich 5 == 5 5 == 6
!= Ungleich 5 != 6 5 != 5
< Kleiner als 5 < 6 5 < 5
> Größer als 6 > 5 5 > 5
<= Kleiner gleich 5 <= 5 6 <= 5
>= Größer gleich 5 >= 5 5 >= 6
a = 5
b = 7
a < b # Ergibt True
a != b # Ergibt True
a >= b # Ergibt False

Bei Zeichenfolgen erfolgt der Vergleich lexikographisch, also in der Reihenfolge des Alphabets.

Operator Bedeutung Beispiel für wahr Beispiel für falsch
== Alle Zeichen gleich "Hallo" == "Hallo" "Hallo" == "hallo"
!= Mindestens ein Zeichen anders "Hallo" != "hallo" "Hallo" != "Hallo"
< Lexikographisch kleiner als "Apfel" < "Birne" "Birne" < "Apfel"
> Lexikographisch größer als "Birne" > "Apfel" "Apfel" > "Birne"
<= Lexikographisch kleiner gleich "Apfel" <= "Apfel" "Birne" <= "Apfel"
>= Lexikographisch größer gleich "Apfel" >= "Apfel" "Apfel" >= "Birne"

Dabei ist zu beachten, dass Großbuchstaben zuerst eingereiht werden:

"Apfel" < "apfel" # Ergibt True

Beginnt eine Zeichenkette mit einer anderen, so wird die kürzere zuerst einsortiert. Die Länge wird jedoch nur nachrangig berücksichtigt:

"Apfel" < "Apfelbaum" # Ergibt True
"Apfel" < "Auge" # Ergibt True

Generell hat das alphabetische Sortieren von Zeichenfolgen eine Menge Tücken und wird daher hier nicht weiter behandelt.

Identitätsvergleich

Jetzt wird es etwas komplizierter. Der Identitätsvergleich (Operator is) prüft, ob zwei Variablen auf das gleiche Objekt im Speicher zeigen. Das ist nicht das gleiche wie der Wertvergleich (der mit == durchgeführt wird). Dieser Vergleich ist v.a. für Objekte relevant und sollte für Zahlen und Zeichenketten nicht verwendet werden:

a = 5
b = 5
a == b # Ergibt True
a is b # Ergibt True

a = 5**4
b = 5**4
a == b # Ergibt True
a is b # Ergibt False

Auf den ersten Blick sehen die beiden Zahlen gleich aus, aber sie sind nicht das gleiche Objekt im Speicher. Das liegt daran, dass Python für kleine Zahlen (zwischen -5 und 256) immer das gleiche Objekt im Speicher verwendet. Daher ist also ein Identitätsvergleich für Zahlen nicht sinnvoll.