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.
谢谢!
答案 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 ,因此在根据键值确定元素相等的情况下,它将保留元素的顺序;因此,通过首先按字母顺序排序,等长的项目将保持这种排序方式。