python:如何按字母顺序对大写字母进行排序

use*_*809 6 python sorting list

我试图按字母顺序对列表进行排序,大写字母应该在小写字母之前.

l = ['a', 'b', 'B', 'A']
Run Code Online (Sandbox Code Playgroud)

sorted(l) 应该导致 ['A','a','B','b']

我试过这两种形式,但无济于事;

>>> sorted(l, key=lambda s: s.lower())
['a', 'A', 'b', 'B']
>>> sorted(l, key=str.lower)
['a', 'A', 'b', 'B']
Run Code Online (Sandbox Code Playgroud)

Jon*_*nts 11

改为创建一个元组:

>>> sorted(lst, key=lambda L: (L.lower(), L))
['A', 'a', 'B', 'b']
Run Code Online (Sandbox Code Playgroud)

这意味着小写的排序顺序不会改变,('a', 'a')但意味着大写的第一个键使其与小写等价物保持一致,然后在它之前排序:例如('a', 'A')<('a', 'a')


ole*_*leg 5

有趣的是这样的列表应该如何对以下列表进行排序

lst = ['abb', 'ABB', 'aBa', 'AbA']
Run Code Online (Sandbox Code Playgroud)

建议的解决方案产生以下结果

>>> sorted(lst, key=lambda L: (L.lower(), L))
['AbA', 'aBa', 'ABB', 'abb']
Run Code Online (Sandbox Code Playgroud)

我可以提出不同结果的更复杂的解决方案

>>> sorted(lst, key=lambda a: sum(([a[:i].lower(), 
                                    a[:i]] for i in range(1, len(a)+1)),[]))
['ABB', 'AbA', 'aBa', 'abb']
Run Code Online (Sandbox Code Playgroud)

  • 好主意,但表达式可以更简单——`[ord(x)+31.5*x.isupper() for x in a]`怎么样? (2认同)