2015-06-21 26 views
5

Problemi con la comprensione del comportamento di Python quando si utilizzano operatori di disuguaglianza per confrontare gli elenchi. Ecco un frammento utilizzando la riga di comando interprete python3:Operatori di disuguaglianza Python; confronto degli elenchi

>>> [8] < [7] 
False 
>>> [8] < [9] 
True 
>>> [8, 6] < [9] 
True 
>>> [8, 6] < [9, 7]  
True     # So far so good 
>>> [8, 6] < [9, 5]  
True     # Huh? 

Quindi, chiaramente Python non è solo muove attraverso indici paralleli. Ho trovato alcune informazioni che dicono che in questo scenario, Python ordina gli elenchi "lessicograficamente", che suppongo significhi alfabeticamente.

Così, ho pensato che forse le liste vengono ordinati e poi confrontati con parallele, ma questo è smentite dal seguente esempio:

>>> [1, 2, 3] < [3, 2, 1] 
True 

La mia ipotesi è che il confronto interno sarebbe [1, 2, 3 ] < [1, 2, 3], che dovrebbe aver restituito false, dal 1 < 1 è false, 2 < 2 è falso, ecc ..

Ogni aiuto è apprezzato.

+0

In un elenco alfabetico '86' <'95 ', giusto? Generalizzato: confrontando le sequenze, l'elemento di sinistra è "il più significativo". Una lista è solo un'altra sequenza. –

risposta

1

E 'in realtà fa un sacco di senso.

Il confronto viene eseguito in modo simile a come si ordinano le parole, in ordine lessicografico. Dopotutto, le parole sono anche elenchi: elenchi di caratteri.

Prima si considera il primo elemento. Se uno è più piccolo, l'intera sequenza è più piccola, se sono uguali, si passa al secondo elemento, ecc.

Chiaramente, "86" viene prima di "95", proprio come "az" viene prima di "bc" e "100" viene prima di "90".

Altro here.

3

chiaramente Python non è solo muove attraverso indici paralleli

Sì lo è, e ferma la prima volta che rileva valori che non risultano uguali. Questo è davvero un ordine lessicografico. Sostituzione dei numeri nei vostri esempi con lettere, e le liste con stringhe:

"h" < "g" # False 
"h" < "i" # True 
"hf" < "i" # True 
"hf" < "ig" # True 
"hf" < "ie" # True - not huh, hf does come before ie alphabetically. 
"abc" < "cba" # True 
4

Che cosa fa Python, basta andare oltre gli elenchi in parallelo e confrontare gli elementi dello stesso indice. La prima volta che incontra elementi non uguali, restituisce questo risultato.

è la stessa, come parole confronto:

"Peter" > "Peer" 

Le prime due lettere sono uguali, il terzo è diverso e sta dando il risultato. Questo è (per le liste) la stessa tecnica usata in un dizionario cartaceo, solo con gli elementi della lista invece dei caratteri.

Ulteriori informazioni: (come suggerito da Padraic Cunningham): Quando una lista è più breve e tutti gli elementi fino alla dimensione della lista più corta dove lo stesso, l'elenco è più considerato maggiore. Questo è anche lo stesso dei dizionari normali (di carta).

+1

Oppure la lista più lunga è considerata più grande se tutti gli elementi sono uguali alla lunghezza della lista più corta –

+0

Grazie, aggiunte queste informazioni – Juergen