tuples und listen vergleichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Hi
kleines Problem:
Wenn ich einen Ausdruck wie (a, b) < (c, d) schreibe, vergleicht er anscheinend erst a und c und wenn die gleich sind b und d und liefert das Ergebnis.
Das finde ich auch ganz gut so
Wenn ich aber jetzt aus einem dieser tuple eine liste mache, stimmt das nicht mehr!

Weiß jemand wie dann verglichen wird? Und mit welchem Hintergrund?

Code: Alles auswählen

>>> (1, 2) < [1, 3]
False
>>> (1, 2) > [1, 3]
True
>>> (1, 2) == [1, 3]
False
>>> (1, 1) > [1, 1]
True
BlackJack

Wenn Du verschiedene (eingebaute) Typen mit '<' oder '>' vergleichst dann bekommst Du "irgendein" Ergebnis, das aber auf jeden Fall konsistent ist. Also das zum Beispiel Tupel immer "kleiner" als Listen sind. Das kann bei einer anderen Python-Version andersherum sein, aber innerhalb eines Programmablaufs gibt's eine totale Ordnung.

Bei benutzerdefinierten Typen kannst Du natürlich '<' und/oder '>' überschreiben und das Verhalten von denen damit ändern.

Hintergrund ist AFAIK das `list.sort()` auch funtkionieren sollte wenn man eine Liste mit den unterschiedlichsten Typen sortiert und das dabei immer ein eindeutiges Ergebnis herauskommen sollte.
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

...das macht natürlich Sinn, danke!
Benutzeravatar
__blackjack__
User
Beiträge: 14027
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Update für Python 3: Werte von verschiedenen Typen lassen sich nicht mehr so wie in Python 2 auf grösser oder kleiner vergleichen:

Code: Alles auswählen

In [63]: (1, 2) < [1, 3]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[63], line 1
----> 1 (1, 2) < [1, 3]

TypeError: '<' not supported between instances of 'tuple' and 'list'
Datentypen können natürlich weiterhin selbst entscheiden wie das Ergebnis eines Vergleichs mit anderen Werten und auch Werten von anderen Datentypen ausgeht.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten