Tengo una lista de cadenas como esta:
['Aden', 'abel']
Quiero ordenar los elementos, sin distinción entre mayúsculas y minúsculas. Entonces quiero obtener:
['abel', 'Aden']
Pero obtengo lo contrario con sorted()
o list.sort()
, porque las mayúsculas aparecen antes que las minúsculas.
¿Cómo puedo ignorar el caso? He visto soluciones que implican minúsculas todos los elementos de la lista, pero no quiero cambiar el caso de los elementos de la lista.
Respuestas:
En Python 3.3+ existe el
str.casefold
método diseñado específicamente para la coincidencia sin mayúsculas y minúsculas:En Python 2 use
lower()
:Funciona para cadenas normales y unicode, ya que ambas tienen un
lower
método.En Python 2 funciona para una combinación de cadenas normales y unicode, ya que los valores de los dos tipos se pueden comparar entre sí. Sin embargo, Python 3 no funciona así: no puede comparar una cadena de bytes y una cadena Unicode, por lo que en Python 3 debe hacer lo correcto y solo ordenar las listas de un tipo de cadena.
fuente
str.lower
función general assorted(lst, key=str.lower)
o (Python 2) usando ellower
método delstring
módulo comosorted(lst, key=string.lower)
. También se puede usarstr.lower
para cadenas en Python 2, pero luego se tendría que usarunicode.lower
paraunicode
objetos, mientras que sestring.lower
aceptan ambas (lo cual, como se dice, probablemente no sea realmente un modo de operación "sensato").En Python 3
str
es Unicode, pero en Python 2 se puede utilizar este enfoque más general que funcione para ambosstr
yunicode
:fuente
[['Aden'], ['abel']]
sorted(x,key=lambda i:i[0].lower())
También puede intentar esto para ordenar la lista en el lugar:
fuente
Esto funciona en Python 3 y no implica minúsculas en el resultado (!).
fuente
En python3 puedes usar
fuente
Lo hice de esta manera para Python 3.3:
Entonces puedes llamar a esta función:
fuente
Clasificación sin distinción entre mayúsculas y minúsculas, ordenando la cadena en su lugar , en Python 2 O 3 (probado en Python 2.7.17 y Python 3.6.9):
La clave es
key=str.lower
. Así es como se ven esos comandos con solo los comandos, para copiar y pegar fácilmente para que pueda probarlos:Tenga en cuenta que si sus cadenas son cadenas Unicode, sin embargo (como
u'some string'
), solo en Python 2 (NO en Python 3 en este caso) elx.sort(key=str.lower)
comando anterior fallará y generará el siguiente error:Si obtiene este error, actualice a Python 3, donde manejan la clasificación unicode, o convierta sus cadenas unicode a cadenas ASCII primero, usando una comprensión de lista, como esta:
Referencias
fuente
Prueba esto
Salida
['abel', 'Aden']
fuente