Как работает сравнение строк, когда они содержат как цифры, так и буквы? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь сравнить время в Python, и придумал несколько странных сравнений. Я понятия не имею, как работают следующие утверждения:

>>> "17:30" > "16:30"
True
>>> "12:30" > "13:30"
False
>>> '18:00 - asdfj' > '16:30 - asdfj'
True

Полагаю, для этого требуется первое число перед двоеточием, я не совсем уверен в этом.

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

По сути, в python это лексикографическое сравнение.

Пример 'a' предшествует 'b', следовательно, 'a' <'b' истинно.Аналогично «2» <«3».Следовательно, «199» <«2» верно, потому что 1 предшествует 2. </p>

1 голос
/ 02 июля 2019

Как уже отмечали другие, сравнение строк - это вопрос лексикографического упорядочения.

Что это означает процедурно:

  • две строки сравниваются по одному символу за раз
  • первый отличающийся символ решает, какая строка «больше» другого
  • , если никакие символы не отличаются и строки одинаковой длины, они «равны».
  • если два символа различны, их «порядковое значение» решает, что «больше»
  • символ «больше», чем «нет символа»

Например, 'ab' > 'a' равно True, потому что 'a' == 'a', но первая строка имеет дополнительный символ.И 'abc' < 'abd' потому что 'c' < 'd'.

'a' < 'b' потому что ord('a') < ord('b').Порядковый номер символа обычно является его значением ASCII для нормальных символов или, точнее, его кодовой точкой Unicode (https://docs.python.org/3/library/functions.html#ord).. Это также означает, что 'A' < 'a', потому что заглавные буквы идут перед строчными в Unicode. И'1' < 'A' потому что цифры идут перед буквами.

Обратите внимание, что иногда это может дать неожиданные результаты (обратите внимание на точки на Ӓ):

>>> 'Ӓ' > 'a'
True
>>> 'A' > 'a'
False

Существует много онлайн-таблиц и обзоров.Unicode, но вот довольно простой пример: https://www.tamasoft.co.jp/en/general-info/unicode.html

Что касается вашего примера:

>>> '18:00 - asdfj' > '16:30 - asdfj'
True

Это имеет смысл, потому что '8' > '6' - остальная часть строки невопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...