Я ищу функцию сортировки, которая ведет себя как первая.
Переведено автоматически
Ответ 1
Для этого в PyPI есть сторонняя библиотека под названием natsort (полное раскрытие, я автор пакета). В вашем случае вы можете выполнить любое из следующих действий:
Вы должны отметить, что natsort использует общий алгоритм, поэтому он должен работать практически для любого ввода, который вы ему вводите. Если вы хотите получить более подробную информацию о том, почему вы могли бы выбрать библиотеку для этого, а не запускать свою собственную функцию, ознакомьтесь со страницей natsortдокументации"Как это работает", в частности со страницей "Особые случаи везде!" Раздел.
Если вам нужен ключ сортировки вместо функции сортировки, используйте любую из приведенных ниже формул.
Учитывая, что популярный запрос / вопрос "как сортировать, как в проводнике Windows?" (или что там еще есть в браузере файловой системы вашей операционной системы), начиная с natsort версии 7.1.0, есть функция, вызываемая os_sorted именно для этого. В Windows он будет сортировать в том же порядке, что и проводник Windows, а в других операционных системах он должен сортировать как любой браузер локальной файловой системы.
>>> from natsort import os_sorted >>> os_sorted(list_of_paths) # your paths sorted like your file system browser
Для тех, кому нужен ключ сортировки, вы можете использовать os_sort_keygen (или os_sort_key если вам просто нужны значения по умолчанию).
Предостережение - Пожалуйста, прочтите документацию API для этой функции перед использованием, чтобы понять ограничения и как добиться наилучших результатов.
Ответ 2
Попробуйте это:
import re
defnatural_sort(l): convert = lambda text: int(text) if text.isdigit() else text.lower() alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)] returnsorted(l, key=alphanum_key)