不寻找解决方法。希望了解Python为什么以这种方式排序。
>>> a = ['aaa','Bbb']
>>> a.sort()
>>> print(a)
['Bbb', 'aaa']
>>> a = ['aaa','bbb']
>>> a.sort()
>>> print(a)
['aaa', 'bbb']
答案 0 :(得分:9)
这是因为大写字符的ASCII值小于小写字符的ASCII值。因此,如果我们按升序对它们进行排序,则大写字母将排在小写字母之前
A
的ASCII为65 a
的ASCII是97 65 <97
因此A < a
(如果您按升序排序)
答案 1 :(得分:4)
str
基于原始字节值(Python 2)或Unicode序数值(Python 3)进行排序;在ASCII和Unicode中,所有大写字母的值都比所有小写字母的值低,因此它们在它们前面进行排序:
>>> ord('A'), ord('Z')
(65, 90)
>>> ord('a'), ord('z')
(97, 112)
某些语言环境(例如en_US
)将更改此排序顺序;如果为you pass locale.strxfrm
as the key
function,则会在这些语言环境中获得不区分大小写的排序,例如
>>> import locale
>>> locale.setlocale(locale.LC_COLLATE, 'en_US.utf-8')
>>> a.sort(key=locale.strxfrm)
>>> a
['aaa', 'Bbb']
答案 2 :(得分:0)
Python将大写字母视为小写字母。如果要排序则忽略大小写。您可以执行以下操作:
a = ['aaa','Bbb']
a.sort(key=str.lower)
print(a)
Outputs:
['aaa', 'Bbb']
忽略大小写。关键参数“ str.lower”使您可以执行此操作。以下文档应有所帮助。 https://docs.python.org/3/howto/sorting.html