Как сравнивается пустая строка с другими строками? - PullRequest
0 голосов
/ 19 апреля 2020

Для сравнения строк используется лексикографический порядок . Лексикографическое упорядочение строк использует номер кодовой точки Unicode для упорядочивания отдельных символов, но в пустой строке нет символов, поэтому вы не можете сделать ord('')

Так почему же кажется, что пустая строка быть самым маленьким персонажем?

l = ['1', '2', 'f', 'F', 'z', ' ', '+', '@', '-', '']
sorted(l)
#['', ' ', '+', '-', '1', '2', '@', 'F', 'f', 'z']

Ответы [ 3 ]

0 голосов
/ 19 апреля 2020

Не совсем. ord() возвращает кодировку ASCII любого символа, который вы там поместили. Если вы проверите таблицу кодировки ASCII, '' там нет. Таким образом, вы передали недопустимый тип в ord(), который будет возвращать TypeError, как если бы вы передавали несколько символов одновременно

0 голосов
/ 19 апреля 2020

ord(s) возвращает код s только тогда, когда s содержит ровно один символ. Другие случаи не имеют смысла и являются неправильными.

Документация Python ord(): https://docs.python.org/3/library/functions.html#ord

Для лексикографического порядка c вы можете увидеть например:

  • s1 == s2 тогда и только тогда, когда s1 и s2 имеют одинаковый размер и одинаковую последовательность символов.
  • В противном случае с s1 и s2 с то же самое начало, такое что s1 == prefix + tail1 и s2 == prefix + tail2, с tail1 != tail2:
    • Если tail1 пусто, то s1 < s2
    • Если tail2 пусто, то s1 > s2
    • Иначе порядок первого символа tail1 и первого символа tail2 решают, s1 < s2 или s1 > s2.

Таким образом, пустая строка является самой низкой из всех.

Несколько примеров:

  • '' < 'a', потому что tail1 пусто
  • '' < 'azerty', потому что tail1 пусто
  • 'abc' < 'abcd' потому что tail1 пусто
  • 'abz' > 'abc' потому что 'z' > 'c'
  • 'azc' > 'abcd' потому что 'z' > 'b'
  • 'azc' > 'abc' потому что 'z' > 'b'
  • 'abz' > 'abc' потому что 'z' > 'c'
0 голосов
/ 19 апреля 2020

ord не используется для сравнения строк. < используется вместо этого по умолчанию, если в качестве функции сортировки не используется параметр key.

ord могут использоваться только строки, содержащие ровно 1 символ, для преобразования единственного символа строки в ее код.

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