Нечутливий до регістру сортування рядка на місці в Python 2 OR 3 (тестований у Python 2.7.17 та 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']
Ключовим є key=str.lower
. Ось як виглядають ці команди за допомогою лише цих команд, щоб легко вставити копію, щоб ви могли їх перевірити:
x = ["aa", "A", "bb", "B", "cc", "C"]
x.sort()
x
x.sort(key=str.lower)
x
Зауважте, що якщо ваші рядки є рядками Unicode (окрім u'some string'
), то лише в Python 2 (у цьому випадку НЕ в Python 3) вищевказана x.sort(key=str.lower)
команда не вдасться і виведе наступну помилку:
TypeError: descriptor 'lower' requires a 'str' object but received a 'unicode'
Якщо ви отримаєте цю помилку, то або перейдіть на Python 3, де вони обробляють сортування Unicode, або перетворіть ваші рядки Unicode в рядки ASCII спочатку, використовуючи розуміння списку, як це:
# 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)
Список літератури:
- https://docs.python.org/3/library/stdtypes.html#list.sort
- Перетворити рядок Unicode в рядок на Python (містить додаткові символи)
- https://www.programiz.com/python-programming/list-conservation