2015-06-21 15 views
5

Проблемы с пониманием поведения Python при использовании операторов неравенства для сравнения списков. Вот фрагмент кода с помощью интерпретатора командной строки python3:Операторы неравенства Питона; сравнение списков

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

Таким образом, очевидно, Python не просто перемещение через параллельные индексов. Я нашел некоторую информацию, в которой говорится, что в этом сценарии Python заказывает списки «лексикографически», что, я думаю, означает в алфавитном порядке.

Итак, я подумал, что списки упорядочиваются, а затем сравниваются параллельно, но это опровергается следующим примером:

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

Мое предположение было то, что внутреннее сравнение будет [1, 2, 3 ] < [1, 2, 3], который должен был быть возвращен False, поскольку 1 < 1 является ложным, 2 < 2 является ложным и т. Д.

Любая помощь приветствуется.

+0

В алфавитном списке '86' <'95', справа? Обобщенный: сравнивая последовательности, левый элемент является «самым значительным». Список - это просто очередная последовательность. –

ответ

1

Это на самом деле имеет большой смысл.

Сравнение выполнено аналогично, поскольку вы хотели бы сортировать слова в лексикографическом порядке. В конце концов, слова также перечислены: списки символов.

Сначала вы рассмотрите первый пункт. Если он меньше, вся последовательность меньше, если они равны, вы переходите ко второму пункту и т. Д.

Ясно, что «86» доходит до «95», так же, как «az» предшествует «bc», а «100» - до «90».

Подробнее here.

3

ясно Python не просто перемещение через параллельные индексы

Да это и останавливает первый раз, когда он находит значения, которые не считаются равными. Это действительно лексикографический порядок. Замена номеров в ваших примерах буквами и списками со строками:

"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

Что такое Python, просто перейдите по спискам параллельно и сравните элементы одного и того же индекса. В первый раз, когда он сталкивается с элементами, которые не равны, он возвращает этот результат.

Это то же самое, как и сравнивающих слова:

"Peter" > "Peer" 

Первые две буквы такие же, третий отличается и дает результат. Это (для списков) тот же метод, который используется в бумажном словаре, только с элементами списка, а не с символами.

Дополнительная информация: (как предложено Padraic Cunningham): когда один список короче и все элементы имеют размер более короткого списка, где тот же самый, более длинный список считается большим. Это то же самое, что и в обычных (бумажных) словарях.

+1

Или более длинный список считается большим, если все элементы равны до длины более короткого списка. –

+0

Спасибо, добавили эту информацию – Juergen

 Смежные вопросы

  • Нет связанных вопросов^_^