たとえば、私はリストを持っています
list = ['sight', 'first', 'love', 'was', 'at', 'It']
このリストを単語の長さでグループ化したい、たとえば
newlist = [['sight', 'first'],['love'], ['was'], ['at', 'It']]
それについて私を助けてください。感謝!
使用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
することをお勧めします。