如何先按key=len
排序字符串列表,再按key=str
排序?我尝试了以下方法,但没有给出所需的排序结果:
>>> ls = ['foo','bar','foobar','barbar']
>>>
>>> for i in sorted(ls):
... print i
...
bar
barbar
foo
foobar
>>>
>>> for i in sorted(ls, key=len):
... print i
...
foo
bar
foobar
barbar
>>>
>>> for i in sorted(ls, key=str):
... print i
...
bar
barbar
foo
foobar
我需要得到:
bar
foo
barbar
foobar
发布于 2013-05-13 14:08:22
定义一个键函数,该函数返回一个元组,其中第一项为len(str)
,第二项为字符串本身。然后按字典顺序比较元组。也就是说,首先比较长度;如果长度相等,则比较字符串。
In [1]: ls = ['foo','bar','foobar','barbar']
In [2]: sorted(ls, key=lambda s: (len(s), s))
Out[2]: ['bar', 'foo', 'barbar', 'foobar']
发布于 2013-05-13 14:20:30
如果您不想使用lambda:
from operator import itemgetter
ls = ['foo','bar','foobar','barbar']
print sorted([ [x,len(x)] for x in ls ] ,key=itemgetter(1,0))
# print [s[0] for s in sorted([ [x,len(x)] for x in ls ] ,key=itemgetter(1,0))]
发布于 2013-05-13 14:28:09
另一个不使用lambda的表单:
>>> [t[1] for t in sorted((len(s),s) for s in ls)]
['bar', 'foo', 'barbar', 'foobar']
https://stackoverflow.com/questions/16515737
复制相似问题