使用 itertools.groupby
:
>>> from itertools import groupby
>>> lis = ['sight', 'first', 'love', 'was', 'at', 'It']
>>> [list(g) for k, g in groupby(lis, key=len)]
[['sight', 'first'], ['love'], ['was'], ['at', 'It']]
请注意,itertools.groupby
要正常工作,所有项都必须按长度排序,否则请使用 collections.defaultdict
(O(N)
) 或先对列表进行排序,然后使用 itertools.groupby
(O(NlogN)
)。
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> lis = ['sight', 'first', 'foo', 'love', 'at', 'was', 'at', 'It']
>>> for x in lis:
... d[len(x)].append(x)
...
>>> d.values()
[['at', 'at', 'It'], ['foo', 'was'], ['love'], ['sight', 'first']]
如果你希望最终的输出列表也是有序的,那么最好按长度对列表项进行排序,并对其应用 itertools.groupby
。