基于多个谓词对字符串列表进行排序

时间:2017-08-08 06:17:30

标签: python string list sorting

给出一个字符串列表:

['foo2', 'abacus', 'azz', 'foo', 'foo3', 'bar', 'azb', 'bars13']

这是调用sorted后正常排序版本的样子:

['abacus', 'azb', 'azz', 'bar', 'bars13', 'foo', 'foo2', 'foo3']

我想首先对它们进行排序,然后,对于具有相同首字母的所有字符串,按降序排序。

对于上面的例子,我想要

['azz', 'azb', 'abacus', 'bars13', 'bar', 'foo3', 'foo2', 'foo']

我该怎么做?

1 个答案:

答案 0 :(得分:0)

与@COLDSPEED在同一行的双程解决方案:

>>> import itertools
>>>
>>> l = ['foo2', 'abacus', 'azz', 'foo', 'foo3', 'bar', 'azb', 'bars13']
>>> s = sorted(l, key=lambda x:(x, len(x)))
>>> t = []
>>>
>>> for g, elems in itertools.groupby(s, key=lambda x: x[0]):
...     t.extend(reversed(list(elems)))
>>>
>>> t
['azz', 'azb', 'abacus', 'bars13', 'bar', 'foo3', 'foo2', 'foo']