Python ..是否访问默认的排序功能?

时间:2019-02-27 15:47:14

标签: python list sorting

Python代码:

b=['six', 'small', 'he', 'foxes', 'saw']
b.sort(key=len)
b

输出:

['he', 'six', 'saw', 'small', 'foxes']

在上面的代码中,我按元素的长度排序并获得了上面的输出。

我想要的输出看起来像这样:['he','saw','six','small','foxes']

所以我要按长度排序。然后,对于长度相同的元素,我想按字母顺序排序。

我的问题:是否有一种无需编写自定义函数的方法?也许是这样的:

b.sort(key=[len,sorted]) # this doesn't work but I think it explains the idea.

谢谢!

2 个答案:

答案 0 :(得分:13)

我们可以使用复合排序键,首先按长度排序,然后再按字典顺序排序。我们通过创建一个元组来做到这一点,因为元组自然会使用元素按照它们出现的顺序进行排序。

b = ['six', 'small', 'he', 'foxes', 'saw']
b.sort(key=lambda s: (len(s), s))

为便于记录,以上结果在此排序列表中:

['he', 'saw', 'six', 'foxes', 'small']

问题中指定的顺序正确(但是问题中的示例输出是错误的,因此请在投票之前注意它!)

答案 1 :(得分:2)

一个简单的选择是排序两次:

b.sort()
b.sort(key=len)

由于sort是 stable ,因此在根据键值确定元素相等的情况下,它将保留元素的顺序;因此,通过首先按字母顺序排序,等长的项目将保持这种排序方式。