Как отсортировать список строк?
Вопрос
Каков наилучший способ создания отсортированного по алфавиту списка в Python?
Решение
Основной ответ:
mylist = ["b", "C", "A"]
mylist.sort()
Это изменяет ваш исходный список (т.е. сортирует на месте). Чтобы получить отсортированную копию списка без изменения оригинала, используйте sorted ( )
функция:
for x in sorted(mylist):
print x
Однако приведенные выше примеры немного наивны, поскольку они не учитывают языковой стандарт и выполняют сортировку с учетом регистра. Вы можете воспользоваться необязательным параметром key
для указания пользовательского порядка сортировки (альтернатива, использующая cmp
, является устаревшим решением, так как его нужно оценивать несколько раз - < code> 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)
Другие советы
Стоит также отметить отсортированный ( )
функция:
for x in sorted(list):
print x
Возвращает новую отсортированную версию списка без изменения исходного списка.
list.sort()
Это действительно так просто:)
Правильный способ сортировки строк:
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-контекстов.
Но как это обрабатывает языковые правила сортировки? Учитывает ли он локаль?
Нет, list.sort ()
- это общая функция сортировки. Если вы хотите выполнить сортировку в соответствии с правилами Unicode, вам нужно будет определить пользовательскую функцию ключа сортировки. Вы можете попробовать использовать pyuca , но я не знаю, насколько полно это так.
Пожалуйста, используйте функцию sorted () в Python3
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
Предположим, s = " ZWzaAd "
Чтобы отсортировать строку выше, простое решение будет ниже единицы.
print ''.join(sorted(s))
Или, может быть,
names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))