Sortowanie bez rozróżniania wielkości liter, sortowanie ciągu w miejscu , w Pythonie 2 LUB 3 (testowane w Pythonie 2.7.17 i Pythonie 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']
Klucz jest key=str.lower
. Oto, jak wyglądają te polecenia tylko z poleceniami, co ułatwia kopiowanie i wklejanie, aby można było je przetestować:
x = ["aa", "A", "bb", "B", "cc", "C"]
x.sort()
x
x.sort(key=str.lower)
x
Zauważ, że jeśli twoje ciągi są ciągami znaków Unicode (jak u'some string'
), to tylko w Pythonie 2 (NIE w Pythonie 3 w tym przypadku) powyższe x.sort(key=str.lower)
polecenie zakończy się niepowodzeniem i wyświetli następujący błąd:
TypeError: descriptor 'lower' requires a 'str' object but received a 'unicode'
Jeśli pojawi się ten błąd, albo zaktualizuj do Pythona 3, w którym obsługuje sortowanie Unicode, lub najpierw przekonwertuj ciągi znaków Unicode na ciągi ASCII, używając funkcji rozumienia list, na przykład:
# 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)
Bibliografia:
- https://docs.python.org/3/library/stdtypes.html#list.sort
- Konwertuj ciąg Unicode na ciąg w Pythonie (zawierający dodatkowe symbole)
- https://www.programiz.com/python-programming/list-comprehension