我的Python字符串列表类似x但足够长:
x = ['aaa','ab','aa','c','a','b','ba']
Run Code Online (Sandbox Code Playgroud)
我想对此列表进行排序为: ['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']和我一样在以下2步:
>>> x.sort()
>>> x.sort(key=len)
>>> x
['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']
Run Code Online (Sandbox Code Playgroud)
但我需要一步到位:我还使用lambda函数绑定(采取帮助):
>>> x.sort(key=lambda item: (item, len(item)))
>>> x
['a', 'aa', 'aaa', 'ab', 'b', 'ba', 'c']
Run Code Online (Sandbox Code Playgroud)
但不是我想要的:
有可能一步到位吗?让我开心.
我的Python:
~$ python --version
Python 2.6.6
Run Code Online (Sandbox Code Playgroud)
你得到了元组的顺序错误的方式.当Python对元组进行排序时,第一个值是主排序,第二个值是子排序等等 - 您的代码假设相反的顺序.
您希望按长度排序,然后按字母顺序排序:
>>> x.sort(key=lambda item: (len(item), item))
>>> x
['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']
Run Code Online (Sandbox Code Playgroud)
编辑:正如DSM在评论中指出的那样,Python首先将字母排序为大写字母,然后是小写字母.如果不需要此行为,请参阅此答案.