Генераторное решение:
def group_subseqs(seq, max_len):
curr_size = 0
result = []
for subseq in seq:
len_subseq = len(subseq)
if curr_size + len_subseq <= max_len:
result.append(subseq)
curr_size += len_subseq
else:
if result:
yield result
if len_subseq <= max_len:
result = [subseq]
curr_size = len_subseq
else:
return
else:
return
if result:
yield result
работает так, как ожидалось (вроде ... перестает давать результат, если подсписок больше max_len
вместо того, чтобы вообще ничего не выдавать):
a = [[1,1,1,1], [1,1,1], [1,1], [1]]
print(list(group_subseqs(a, 8)))
# [[[1, 1, 1, 1], [1, 1, 1]], [[1, 1], [1]]]
print(list(group_subseqs(a, 4)))
# [[[1, 1, 1, 1]], [[1, 1, 1]], [[1, 1], [1]]]
print(list(group_subseqs(a, 3)))
# []
print(list(group_subseqs(a[::-1], 3)))
# [[[1], [1, 1]], [[1, 1, 1]]]