给出一个字符串列表:
['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']
我该怎么做?
答案 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']