Как отсортировать список строк?

Каков наилучший способ создания списка, отсортированного по алфавиту, в Python?

Комментарии к вопросу (1)
Решение

Основной ответ:

mylist = ["b", "C", "A"]
mylist.sort()

Это модифицирует ваш исходный список (т.е. сортирует на месте). Чтобы получить отсортированную копию списка, не изменяя оригинал, используйте функцию sorted():

for x in sorted(mylist):
    print x

Однако приведенные примеры немного наивны, поскольку не учитывают локаль и выполняют сортировку с учетом регистра. Вы можете воспользоваться опциональным параметром key, чтобы задать собственный порядок сортировки (альтернатива, использование cmp, является устаревшим решением, так как его приходится оценивать несколько раз - key вычисляется только один раз для каждого элемента).

Итак, для сортировки в соответствии с текущей локалью с учетом правил, специфичных для данного языка (cmp_to_key - вспомогательная функция из functools):

sorted(mylist, key=cmp_to_key(locale.strcoll))

И, наконец, если нужно, вы можете указать custom locale для сортировки:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
  key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']

Последнее замечание: вы увидите примеры сортировки без учета регистра, которые используют метод lower() - они неверны, потому что работают только для подмножества символов ASCII. Эти два метода неверны для любых неанглийских данных:

# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
Комментарии (8)

Стоит также отметить [отсортированный()][1] функция:

for x in sorted(list):
    print x

Это возвращает новый отсортированный вариант списка, не изменяя исходный список.

[1]: https://docs.python.org/3/library/functions.html#sorted на "сортировка"и

Комментарии (0)
list.sort()

Это действительно так просто :)

Комментарии (0)

Как правильно сортировать строки-это:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']

# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']

Предыдущий пример класса MyList.сортировки(ключ=лямбда х: х.ниже ()) будет работать нормально для ASCII-только контексты.

Комментарии (0)

Но как он справляется с правилами сортировки по языковому признаку? Учитывает ли он локаль?

Нет, list.sort() - это общая функция сортировки. Если вы хотите сортировать в соответствии с правилами Unicode, вам придется определить пользовательскую функцию ключа сортировки. Вы можете попробовать использовать модуль pyuca, но я не знаю, насколько он полный.

Комментарии (0)

Пожалуйста, используйте отсортированный (функций) в Питон3

items = ["love", "like", "play", "cool", "my"]
sorted(items2)
Комментарии (0)

Предположим, что с = с "ZWzaAd"` в

Чтобы отсортировать строки выше простого решения будет ниже.

print ''.join(sorted(s))
Комментарии (1)

или, может быть:

names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
Комментарии (0)

Старый вопрос, но если вы хотите сделать локали сортировка без установки язык.Значение lc_all вы можете сделать это с помощью библиотека PyICU, как полагают этот ответ:

``питон импорт ОИТ # PyICU

деф sorted_strings(строки, локаль=нет): если локали нет: возвращает отсортированный(строк) подборочная машина = ОИТ.Сортировально-подборочной машины.метод createinstance(ОИТ.Локаль(локаль)) возвращает отсортированный(строки, ключ=сортировально-подборочной машины.getSortKey) ``

Затем звонок с например:

питон new_list = sorted_strings(list_of_strings, что "в ru_RU.в utf8 и")

Этот работал для меня без установки какого-либо действия или изменения других параметров системы.

(Это уже было предложено в комментарии aboveно я хотел дать ему больше внимания, потому что я пропустил это на себе в первую очередь).

Комментарии (0)