Eu tenho uma lista de seqüências de caracteres como esta:
['Aden', 'abel']
Quero classificar os itens, sem distinção entre maiúsculas e minúsculas. Então, eu quero obter:
['abel', 'Aden']
Mas entendo o contrário com sorted()
or list.sort()
, porque maiúsculas aparece antes de minúsculas.
Como posso ignorar o caso? Vi soluções que envolvem letras minúsculas em todos os itens da lista, mas não quero alterar o caso dos itens da lista.
Respostas:
No Python 3.3 ou superior, existe o
str.casefold
método projetado especificamente para correspondência sem caixa:No Python 2, use
lower()
:Funciona para cadeias normais e unicode, pois ambas possuem um
lower
método.No Python 2, ele funciona para uma mistura de cadeias normais e unicode, já que os valores dos dois tipos podem ser comparados entre si. O Python 3 não funciona assim: você não pode comparar uma sequência de bytes e uma sequência unicode; portanto, no Python 3 você deve fazer a coisa sã e classificar apenas as listas de um tipo de sequência.
fonte
str.lower
função geral comosorted(lst, key=str.lower)
ou (Python 2) usando olower
método dostring
módulo comosorted(lst, key=string.lower)
. Também se pode usarstr.lower
para strings no Python 2, mas seria necessário usarunicode.lower
paraunicode
objetos, enquantostring.lower
aceita os dois (o que, como você disse, provavelmente não é realmente um modo de operação "saudável").No Python 3
str
é unicode, mas no Python 2 você pode usar essa abordagem mais geral que funciona para ambosstr
eunicode
:fonte
[['Aden'], ['abel']]
sorted(x,key=lambda i:i[0].lower())
Você também pode tentar fazer isso para classificar a lista no local:
fonte
Isso funciona no Python 3 e não envolve letras minúsculas no resultado (!).
fonte
Em python3 você pode usar
fonte
Eu fiz dessa maneira para o Python 3.3:
Então você pode chamar esta função:
fonte
Classificação sem distinção entre maiúsculas e minúsculas, classificando a sequência no lugar , no Python 2 OR 3 (testado no Python 2.7.17 e Python 3.6.9):
A chave é
key=str.lower
. Veja como esses comandos são apenas os comandos, para facilitar a cópia e colar para que você possa testá-los:Observe que, se suas strings forem unicode, no entanto (como
u'some string'
), somente no Python 2 (não no Python 3 neste caso), ox.sort(key=str.lower)
comando acima falhará e emitirá o seguinte erro:Se você receber esse erro, atualize para o Python 3, onde eles lidam com a classificação unicode, ou converta suas strings unicode em strings ASCII primeiro, usando uma compreensão de lista, como esta:
Referências:
fonte
Tente isto
Resultado
['abel', 'Aden']
fonte