为什么Python排序将大写项目放在首位?

时间:2019-01-18 03:50:53

标签: python list sorting

不寻找解决方法。希望了解Python为什么以这种方式排序。

>>> a = ['aaa','Bbb']
>>> a.sort()
>>> print(a)
['Bbb', 'aaa']

>>> a = ['aaa','bbb']
>>> a.sort()
>>> print(a)
['aaa', 'bbb']

3 个答案:

答案 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