4

たとえば、私はリストを持っています

list = ['sight', 'first', 'love', 'was', 'at', 'It']

このリストを単語の長さでグループ化したい、たとえば

newlist = [['sight', 'first'],['love'], ['was'], ['at', 'It']]

それについて私を助けてください。感謝!

4

3 に答える 3

9

使用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することをお勧めします。

于 2013-11-08T20:38:15.893 に答える