Ответы:
Основной ответ:
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))
И, наконец, если вам нужно, вы можете указать собственный языковой стандарт для сортировки:
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)
mylist.sort(key=str.lower)
быстрее.
[1, 2, 3].sort()
. Так sort()
как список сортируется на месте (т. Е. Изменяется непосредственно), он не возвращает отсортированный список и на самом деле ничего не возвращает, поэтому выводится ваш оператор print None
. Если вы сохранили свой список в переменную, скажем x
, вызвал x.sort()
, то print(x)
вы увидите отсортированный список.
Также стоит отметить sorted()
функцию:
for x in sorted(list):
print x
Это возвращает новую отсортированную версию списка без изменения исходного списка.
Правильный способ сортировки строк:
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.sort(key=lambda x: x.lower())
отлично подойдет для контекстов только ASCII.
Пожалуйста, используйте функцию sorted () в Python3
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
Но как это обрабатывает языковые правила сортировки? Учитывает ли это язык?
Нет, list.sort()
это общая функция сортировки. Если вы хотите выполнить сортировку в соответствии с правилами Unicode, вам нужно будет определить пользовательскую функцию ключа сортировки. Вы можете попробовать использовать модуль pyuca , но я не знаю, насколько он завершен.
Старый вопрос, но если вы хотите выполнить сортировку locale.LC_ALL
с учетом локали без настройки, вы можете сделать это, используя библиотеку PyICU, как показано в этом ответе :
import icu # PyICU
def sorted_strings(strings, locale=None):
if locale is None:
return sorted(strings)
collator = icu.Collator.createInstance(icu.Locale(locale))
return sorted(strings, key=collator.getSortKey)
Затем позвоните, например:
new_list = sorted_strings(list_of_strings, "de_DE.utf8")
Это работало для меня без установки каких-либо локалей или изменения других настроек системы.
(Это уже было предложено в комментарии выше , но я хотел сделать его более заметным, потому что сначала я его пропустил.)
Или, может быть:
names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
Это просто: https://trinket.io/library/trinkets/5db81676e4
scores = '54 - Alice,35 - Bob,27 - Carol,27 - Chuck,05 - Craig,30 - Dan,27 - Erin,77 - Eve,14 - Fay,20 - Frank,48 - Grace,61 - Heidi,03 - Judy,28 - Mallory,05 - Olivia,44 - Oscar,34 - Peggy,30 - Sybil,82 - Trent,75 - Trudy,92 - Victor,37 - Walter'
Scores = Scores.split (',') для х в отсортированных (баллы): печать (х)
locale
и это методы сортировки строк для естественной сортировки в соответствии с текущей локалью.