Como classificar uma lista de strings?

votos
321

Qual é a melhor maneira de criar uma lista ordenada alfabeticamente em Python?

Publicado 30/08/2008 em 18:03
fonte usuário
Em outras línguas...                            


8 respostas

votos
413

resposta básica:

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

Isso modifica sua lista original (ou seja, os tipos no local). Para obter uma cópia classificada da lista, sem alterar o original, use a sorted()função:

for x in sorted(mylist):
    print x

No entanto, os exemplos acima são um pouco ingênuo, porque eles não levam local em conta, e realizar uma ordenação maiúsculas de minúsculas. Você pode aproveitar o parâmetro opcional keypara especificar a ordem de classificação personalizada (a alternativa, usando cmp, é uma solução obsoleta, uma vez que tem de ser avaliado várias vezes - keysó é calculado uma vez por elemento).

Assim, para classificar de acordo com o local atual, tendo regras específicas de idioma em conta ( cmp_to_keyé uma função auxiliar de functools):

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

E, finalmente, se você precisar, você pode especificar uma localidade personalizada para a classificação:

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']

Última nota: você vai ver exemplos de case-insensitive de classificação que utilizam o lower()método - esses são incorreto, porque eles trabalham apenas para o subconjunto ASCII de caracteres. Aqueles dois estão errados para quaisquer dados não-Inglês:

# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
Respondeu 30/08/2008 em 18:10
fonte usuário

votos
43

É também de destacar a sorted()função:

for x in sorted(list):
    print x

Isso retorna uma versão nova, classificado de uma lista sem alterar a lista original.

Respondeu 30/08/2008 em 23:14
fonte usuário

votos
33
list.sort()

É realmente muito simples :)

Respondeu 30/08/2008 em 18:04
fonte usuário

votos
18

A maneira correta de classificar cordas é:

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']

O exemplo anterior de mylist.sort(key=lambda x: x.lower())irá funcionar bem para contextos somente ASCII.

Respondeu 28/10/2009 em 23:45
fonte usuário

votos
10

Mas como é que essa linguagem alça específica regras de classificação? Leva locale em conta?

Não, list.sort()é uma função de classificação genérica. Se você quiser classificar de acordo com as regras Unicode, você terá que definir uma função personalizada chave de classificação. Você pode tentar usar o pyuca módulo, mas eu não sei como completo é.

Respondeu 30/08/2008 em 19:10
fonte usuário

votos
4

Por favor, use a função classificadas () in Python3

items = ["love", "like", "play", "cool", "my"]
sorted(items2)
Respondeu 27/12/2017 em 13:24
fonte usuário

votos
1

supor s = "ZWzaAd"

Para classificar corda acima da solução simples será inferior a um.

print ''.join(sorted(s))
Respondeu 12/05/2017 em 06:16
fonte usuário

votos
0

Ou talvez:

names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
Respondeu 13/08/2018 em 15:46
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more