Дополнительно
Как отсортировать список строк?
Каков наилучший способ создания списка, отсортированного по алфавиту, в Python?
395
9
Каков наилучший способ создания списка, отсортированного по алфавиту, в Python?
Основной ответ:
Это модифицирует ваш исходный список (т.е. сортирует на месте). Чтобы получить отсортированную копию списка, не изменяя оригинал, используйте функцию
sorted()
:Однако приведенные примеры немного наивны, поскольку не учитывают локаль и выполняют сортировку с учетом регистра. Вы можете воспользоваться опциональным параметром
key
, чтобы задать собственный порядок сортировки (альтернатива, использованиеcmp
, является устаревшим решением, так как его приходится оценивать несколько раз -key
вычисляется только один раз для каждого элемента).Итак, для сортировки в соответствии с текущей локалью с учетом правил, специфичных для данного языка (
cmp_to_key
- вспомогательная функция из functools):И, наконец, если нужно, вы можете указать custom locale для сортировки:
Последнее замечание: вы увидите примеры сортировки без учета регистра, которые используют метод
lower()
- они неверны, потому что работают только для подмножества символов ASCII. Эти два метода неверны для любых неанглийских данных:Стоит также отметить [
отсортированный()
][1] функция:Это возвращает новый отсортированный вариант списка, не изменяя исходный список.
[1]: https://docs.python.org/3/library/functions.html#sorted на "сортировка"и
Это действительно так просто :)
Как правильно сортировать строки-это:
Предыдущий пример класса MyList.сортировки(ключ=лямбда х: х.ниже ()) будет работать нормально для ASCII-только контексты.
Нет,
list.sort()
- это общая функция сортировки. Если вы хотите сортировать в соответствии с правилами Unicode, вам придется определить пользовательскую функцию ключа сортировки. Вы можете попробовать использовать модуль pyuca, но я не знаю, насколько он полный.Пожалуйста, используйте отсортированный (функций) в Питон3
Предположим, что с = с "ZWzaAd"` в
Чтобы отсортировать строки выше простого решения будет ниже.
Старый вопрос, но если вы хотите сделать локали сортировка без установки
язык.Значение lc_all
вы можете сделать это с помощью библиотека PyICU, как полагают этот ответ:``питон импорт ОИТ # PyICU
деф sorted_strings(строки, локаль=нет): если локали нет: возвращает отсортированный(строк) подборочная машина = ОИТ.Сортировально-подборочной машины.метод createinstance(ОИТ.Локаль(локаль)) возвращает отсортированный(строки, ключ=сортировально-подборочной машины.getSortKey) ``
Затем звонок с например:
питон new_list = sorted_strings(list_of_strings, что "в ru_RU.в utf8 и")
Этот работал для меня без установки какого-либо действия или изменения других параметров системы.
(Это уже было предложено в комментарии aboveно я хотел дать ему больше внимания, потому что я пропустил это на себе в первую очередь).