Hoe werkt het vergelijken van tupels in Python?

Ik heb het programmeerboek Core Pythongelezen en de auteur laat een voorbeeld zien zoals:

(4, 5) < (3, 5) # Equals false

Dus ik vraag me af, hoe/waarom is het gelijk aan onwaar? Hoe vergelijkt python deze twee tupels?

Trouwens, het wordt niet uitgelegd in het boek.


Antwoord 1, autoriteit 100%

Tuples worden positie voor positie vergeleken:
het eerste item van de eerste tupel wordt vergeleken met het eerste item van de tweede tupel; als ze niet gelijk zijn (d.w.z. de eerste is groter of kleiner dan de tweede), dan is dat het resultaat van de vergelijking, anders wordt het tweede item beschouwd, dan het derde, enzovoort.

Zie Algemene volgordebewerkingen:

Sequenties van hetzelfde type ondersteunen ook vergelijkingen. In het bijzonder worden tupels en lijsten lexicografisch vergeleken door overeenkomstige elementen te vergelijken. Dit betekent dat om gelijk te kunnen vergelijken, elk element gelijk moet zijn en dat de twee reeksen van hetzelfde type moeten zijn en dezelfde lengte moeten hebben.

Ook Waardevergelijkingenvoor meer informatie:

Lexicografische vergelijking tussen ingebouwde collecties werkt als volgt:

  • Om twee collecties gelijk te kunnen vergelijken, moeten ze van hetzelfde type zijn, dezelfde lengte hebben en moet elk paar corresponderende elementen gelijk zijn (bijvoorbeeld [1,2] == (1,2)is onwaar omdat het type niet hetzelfde is).
  • Collecties die de volgorde-vergelijking ondersteunen, worden hetzelfde besteld als hun eerste ongelijke elementen (bijvoorbeeld [1,2,x] <= [1,2,y]heeft dezelfde waarde als x <= y). Als een overeenkomstig element niet bestaat, wordt de kortere collectie eerst besteld (bijvoorbeeld [1,2] < [1,2,3]is waar).

Zo niet gelijk, worden de sequenties hetzelfde besteld als hun eerste verschillende elementen. Bijvoorbeeld, cmp ([1,2, x], [1,2, y]) geeft hetzelfde als cmp (x, y). Als het overeenkomstige element niet bestaat, wordt de kortere sequentie als kleiner beschouwd (bijvoorbeeld [1,2] & LT; [1,2,3] retourneert true).

Opmerking 1 : <EN >Betekent niet “kleiner dan” en “groter dan” maar “is voor” “is na”: dus (0, 1) “is vóór” (1, 0).

Opmerking 2 : Tuples mogen niet worden beschouwd als vectoren in een n-dimensionale ruimte , vergeleken volgens hun lengte.

Opmerking 3 : Verwijzend naar vraag https://stackoveroverflow.com/ Vragen / 36911617 / Python-2-tuple-vergelijking : Denk niet dat een tuple “groter” is dan een andere alleen als een element van de eerste groter is dan de overeenkomstige in de tweede.


Antwoord 2, Autoriteit 10%

De python-documentatie legt het uit.

Tuples en lijsten worden vergeleken
lexicografisch gebruikt vergelijking van
Corresponderende elementen. Dit betekent
dat om gelijk te vergelijken, elk element
moet gelijk en de twee vergelijken
Sequenties moeten van hetzelfde type zijn en
hebben dezelfde lengte.


Antwoord 3

De python 2.5-documentatielegt het goed uit.

Tuples en lijsten worden lexicografisch vergeleken met behulp van vergelijking van overeenkomstige elementen. Dit betekent dat om gelijk te kunnen vergelijken, elk element gelijk moet zijn en dat de twee reeksen van hetzelfde type moeten zijn en dezelfde lengte moeten hebben.

Als ze niet gelijk zijn, worden de reeksen hetzelfde geordend als hun eerste verschillende elementen. Bijvoorbeeld, cmp([1,2,x], [1,2,y]) geeft hetzelfde terug als cmp(x,y). Als het corresponderende element niet bestaat, wordt de kortere reeks eerst geordend (bijvoorbeeld [1,2] < [1,2,3]).

Helaas lijkt die pagina te zijn verdwenen in de documentatie voor recentere versies.


Antwoord 4

Ik had eerder enige verwarring over de vergelijking van gehele getallen, dus ik zal het uitleggen om meer beginnersvriendelijk te zijn met een voorbeeld

a = ('A','B','C') # see it as the string "ABC"
b = ('A','B','D')

A wordt geconverteerd naar de bijbehorende ASCII ord('A') #65hetzelfde voor andere elementen

Dus,
>> a>b # True

je kunt het zien als het vergelijken van strings (het is precies, eigenlijk)

hetzelfde geldt ook voor gehele getallen.

x = (1,2,2) # see it the string "123"
y = (1,2,3)
x > y # False

omdat (1 is niet groter dan 1, ga naar de volgende, 2 is niet groter dan 2, ga naar de volgende 2 is minder dan drie -lexicografisch -)

Het belangrijkste punt wordt genoemd in het bovenstaande antwoord

beschouw het als een element voordat een ander alfabetisch niet-element groter is dan een element en beschouw in dit geval alle tuple-elementen als één string.

Other episodes