2015-06-21 13 views
5

Problemy z rozumieniem zachowania w języku Python podczas korzystania z operatorów nierówności do porównywania list. Oto fragment z wykorzystaniem python3 wiersza poleceń interpretera:Operatory nierówności Python; porównywanie list

>>> [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? 

więc wyraźnie Python nie tylko poruszanie się indeksów równoległych. Znalazłem informacje, które mówią, że w tym scenariuszu Python porządkuje listy "leksykograficznie", co, jak sądzę, oznacza alfabetycznie.

Więc pomyślałem, że może wykazy dostać sortowane, a następnie porównywane równolegle, ale to jest obalona przez następujący przykład:

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

Domyślam się, że wewnętrzne porównanie byłoby [1, 2, 3 ] < [1, 2, 3], które powinny powrócić Fałsz, ponieważ 1 < 1 jest fałszywe, 2 < 2 jest fałszywe, itp.

Każda pomoc jest doceniana.

+0

W alfabetycznej listy '86' < '95', prawda? Uogólnione: Porównywanie sekwencji, lewy element jest "najbardziej znaczący". Lista to tylko kolejna sekwencja. –

Odpowiedz

1

To rzeczywiście sprawia, że ​​wiele sensu.

Porównanie odbywa się podobnie jak sortowanie słów w porządku leksykograficznym. W końcu słowa to także listy: listy znaków.

najpierw rozważyć pierwszy element. Jeśli jeden jest mniejszy, cała sekwencja jest mniejsza, jeśli są równe, przechodzisz do drugiej pozycji, itd.

Najwyraźniej "86" pojawia się przed "95", tak jak "az" występuje przed "bc" a "100" pojawia się przed "90".

Więcej here.

3

wyraźnie Python nie tylko poruszając się równolegle indeksów

Tak to jest, i zatrzymuje się po raz pierwszy stwierdzi, że wartości nie porównać równe. To rzeczywiście porządek leksykograficzny. Wymiana numerów w swoich przykładach z literami, a list z tekstem:

"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

Co to jest Python, przejdź równolegle do list i porównaj elementy tego samego indeksu. Po pierwszym napotkaniu elementów, które nie są równe, zwraca ten wynik.

To jest taka sama, jak porównywanie słów:

"Peter" > "Peer" 

dwie pierwsze litery są takie same, a trzeci jest inny i daje wynik. To jest (dla list) tę samą technikę, która jest używana w słowniku papierowym, tylko z elementami listy zamiast znaków.

Dodatkowe informacje: (zgodnie z sugestią Padraic Cunningham): Gdy jedna lista jest krótsza, a wszystkie elementy do rozmiaru krótszej listy, to dłuższa lista jest uważana za większą. To samo dotyczy standardowych słowników (papierowych).

+1

Albo już lista jest uważane za większe, jeśli wszystkie elementy są równe do długości krótszej listy –

+0

Dzięki, dodaje to info – Juergen