Подтвердить что ты не робот

Почему никто не является наименьшим в python?

Что я узнал из python None:

None is frequently used to represent the absence of a value

Когда я помещаю в список и сортирую с числами и строкой. Я получил следующий результат, что означает, что это наименьшее число?

Реверс:

>>> sorted([1, 2, None, 4.5, (-sys.maxint - 1), (sys.maxint - 1), 'abc'], reverse=True)
['abc', 9223372036854775806, 4.5, 2, 1, -9223372036854775808, None]
>>>

Обычный сорт:

>>> sorted([1, 2, None, 4.5, (-sys.maxint - 1), (sys.maxint - 1), 'abc'])
[None, -9223372036854775808, 1, 2, 4.5, 9223372036854775806, 'abc']
>>>

Как функция сортировки python работает с None?

4b9b3361

Ответ 1

При сравнении разных типов CPython 2 применяет несколько разных правил:

  • None сначала сортируется.
  • Числа встречаются перед другими типами и сравниваются численно между собой.
  • Другие типы упорядочены по их имени типа, если они явно не реализуют методы сравнения.

Кроме того, некоторые типы реализуют пользовательские правила сортировки и могут отказаться от всех попыток сортировки. Сложные числа вызывают исключение, когда вы пытаетесь их упорядочить, например, и datetime объекты делают это при попытке упорядочить их относительно других типов.

Это не описано в справочной документации Python; см. сравнительный код по умолчанию в object.c. Это деталь реализации, а не то, на что должен опираться ваш код. Документация документации операторов сравнения сообщает:

Большинство других объектов встроенных типов сравниваются неравномерно, если они не являются одним и тем же объектом; выбор того, считается ли один объект меньшим или большим, чем другой, делается произвольно, но последовательно в пределах одного выполнения программы.

Цель заключалась в том, чтобы сделать сравнение между различными типами стабильными при сортировке последовательности смешанных объектов.

В Python 3 правила сравнения были ужесточены; вы можете сравнивать объекты, которые явно реализуют сравнения. После многолетнего опыта был сделан вывод о том, что допускание произвольных сравнений только приводило к большей путанице; сравнение строк с цифрами в них целыми числами всегда смущает новичков, например.

Вместо этого вместо этого будет генерироваться исключение.