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.