Vergleichen zweier Listen mit dem Operator "größer als" oder "kleiner als"
Bemerkte ich ein Stück code vor kurzem direkt Vergleich zweier Listen von Ganzzahlen in etwa so:
a = [10,3,5, ...]
b = [5,4,3, ...,]
if a > b:
...
das schien ein bisschen eigenartig, aber ich dachte es würde zurück True
wenn alle list_a
's Elemente, die größer sind als list_b
's, und False, wenn jedes element gleich ist, oder list_b
's Elemente, die größer sind als list_a
's. Also habe ich es getestet:
>>> a=[3,3,3,3]
>>> b=[4,4,4,4]
>>> a>b
False
>>> b>a
True
Ok, das funktioniert. Wie:
>>> b = [1,1,1,1]
>>> a = [1,1,1,1]
>>> a>b
False
>>> b>a
False
aber wenn es bekommt mehr fuzzy:
>>> a=[1,1,3,1]
>>> b=[1,3,1,1]
>>> a>b
False
>>> b>a
True
oder:
>>> a=[1,3,1,1]
>>> b=[1,1,3,3]
>>> a>b
True
>>> b>a
False
sind die Ergebnisse ein bisschen Fremd. Was ist python eigentlich? Es scheint, dass es gibt das Ergebnis zugunsten der ersten Liste, in der Links die meisten element größer ist dann die entsprechende?
InformationsquelleAutor der Frage Timmy O'Mahony | 2012-10-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Vergleich von Sequenzen und Anderen Typen in das Python-tutorial:
Siehe auch den Wikipedia-Artikel über lexikographische Ordnung.
InformationsquelleAutor der Antwort gefei
Da finde ich nicht die Erklärung der Liste/Tupel-Vergleich mit "lexikographische Bestellung" besonders erhellend auf den ersten, hier ein Versuch es zu erklären "in meinen eigenen Worten". Zuerst, hier sind einige Beispiele für Listen, die gemäß der Erklärung unter:
Dem paar der Elemente, die bei jedem index sind im Vergleich in der Reihe. Also, den Vergleich
a
zub
führt1
im Vergleich zu1
,2
im Vergleich zu2
, und3
im Vergleich zu10
.Den Vergleich von Paaren wird aufhören, wenn entweder ein ungleiches paar von Gegenständen gefunden oder--wenn die Listen unterschiedlich lang sind--das Ende der kürzeren Liste erreicht ist.
Beispielsweise beim Vergleich
a
undb
Vergleiche Stoppt, wenn3
und10
verglichen werden. Beim Vergleichb
undc
Vergleiche Stoppt, wenn10
und3
verglichen werden.Sobald ein ungleiches paar gefunden, das Gesamtergebnis ist das Ergebnis des Vergleichs der ungleichen Elemente. Dies gilt unabhängig davon, ob die Listen die gleiche Länge haben oder nicht-zum Beispiel-Liste
b
ist größer als Listec
weil die100
imc
nie ins Spiel kommt.Beispielsweise beim Vergleich
a
zub
, das Gesamt-Resultat wird das Ergebnis des Vergleichs3
zu10
.a < b -> True
weil3
ist weniger als10
.a > b -> False
weil3
ist nicht größer als10
.a == b -> False
weil3
nicht gleich10
.Wenn eine der Listen kürzer ist und der N Elemente gleich sind, um die ersten N Elemente der längere Liste, als mit
a
undc
ist, desto kürzer wird die Liste angesehen werden, weniger als die längere Liste (soa
ist weniger alsc
).Beiden Listen vergleichen als gleich nur, wenn Sie die gleiche Länge haben und alle Paare von Elemente als gleich verglichen werden.
Hinweis zu Typen: wenn die Objekte in einem pair nicht vergleichbar, der Vergleich schlägt fehl mit einem
TypeError
wie gewohnt. Zum Beispiel, vergleichen, Listea
zuf
fehl, wenn1
ist im Vergleich zu'a'
. Beachten Sie aber auch, dass die Listend
unde
verglichen werden kann, da die'a'
ime
ist nie im Vergleich zu etwas ind
.InformationsquelleAutor der Antwort