Просто используйте groupby
:
>>> l = [[1]*i for i in range(1, 5) for _ in range(3)]
>>> l
[[1], [1], [1], [1, 1], [1, 1], [1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> result = [list(g) for _, g in groupby(l, key=len)]
>>> result
[[[1], [1], [1]], [[1, 1], [1, 1], [1, 1]], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]]
В качестве альтернативы, если они не заказаны, вы можете использовать defaultdict
:
>>> import random
>>> random.shuffle(l)
>>> l
[[1, 1, 1], [1, 1, 1, 1], [1], [1], [1, 1], [1, 1], [1, 1, 1], [1, 1, 1], [1, 1], [1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for e in l:
... d[len(e)].append(e)
...
>>> result = list(d.values())
>>> result
[[[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1], [1], [1]], [[1, 1], [1, 1], [1, 1]]]