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):
>>> x = ["aa", "A", "bb", "B", "cc", "C"]
>>> x.sort()
>>> x
['A', 'B', 'C', 'aa', 'bb', 'cc']
>>> x.sort(key=str.lower) # <===== there it is!
>>> x
['A', 'aa', 'B', 'bb', 'C', 'cc']
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:
x = ["aa", "A", "bb", "B", "cc", "C"]
x.sort()
x
x.sort(key=str.lower)
x
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) el x.sort(key=str.lower)
comando anterior fallará y generará el siguiente error:
TypeError: descriptor 'lower' requires a 'str' object but received a 'unicode'
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:
# for Python2, ensure all elements are ASCII (NOT unicode) strings first
x = [str(element) for element in x]
# for Python2, this sort will only work on ASCII (NOT unicode) strings
x.sort(key=str.lower)
Referencias
- https://docs.python.org/3/library/stdtypes.html#list.sort
- Convierta una cadena Unicode en una cadena en Python (que contiene símbolos adicionales)
- https://www.programiz.com/python-programming/list-comprehension