Как сказал Аарон.Разбив его на ваши пункты:
- Поскольку сортировка делает что-то наполовину пригодным для использования, в противном случае она вообще не имела бы смысла (смешанные списки).Обычно это не очень хорошая идея, но многое в Python разработано для удобства, а не для строгости.
- Упорядочено по имени типа.Это означает, что вещи одной группы типов вместе, где они могут быть отсортированы.Вероятно, они должны быть сгруппированы по классам типов, таким как числа вместе, но нет подходящей структуры класса типов.Там может быть несколько более конкретных правил (вероятно, это правило для числовых типов), мне нужно проверить источник.
- Одно - строка, а другое - юникод.Однако у них может быть операция прямого сравнения, но вполне возможно, что несопоставимый тип будет сгруппирован между ними, что приведет к путанице.Я не знаю, есть ли код, чтобы этого избежать.
Так что в общем случае это не имеет смысла, но иногда это полезно.
from random import shuffle
letters=list('abcdefgh')
ints=range(8)
both=ints+letters
shuffle(ints)
shuffle(letters)
shuffle(both)
print sorted(ints+letters)
print sorted(both)
Обе печатисначала целые, затем буквы.
Как правило, вы не хотите смешивать типы случайным образом внутри программы, и, очевидно, Python 3 предотвращает это, когда Python 2 пытается сделать смутный смысл там, где его нет.Вы все еще можете отсортировать по lambda a,b: cmp(repr(a),repr(b))
(или что-то лучше), если действительно хотите, но, похоже, разработчики языка согласились, что это непрактичное поведение по умолчанию.Я ожидаю, что это варьируется, что вызывает наименьшее удивление, но намного сложнее обнаружить проблему в смысле Python 2.