Я ломаю себе голову над этой маленькой проблемой, которую, я уверен, можно (и нужно) решить рекурсивно.
# split list in sublists based on length of first element.
list = [3, 1, 2, 3, 4, 1, 2, 3, 4]
#* #*
# *number of elements of the sublist
Это лучше показано, чем объяснено, приведенное выше должно привести к:
[[1, 2, 3], [1, 2, 3, 4]]
Списки, которые я обрабатываю, всегда соблюдают это logi c, первым элементом всегда является длина следующих n элементов.
EDIT:
Основываясь на некоторых предложениях, я просто добавил yield, чтобы сделать это лениво.
def split(ls):
"""
func that given a list extracts sub lists with the length indicated by the first element
[2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4] => [[1, 2], [1, 2, 3], [1, 2, 3, 4]]
"""
res = []
while ls:
dim = ls[0]
yield ls[1:dim + 1]
ls = ls[dim + 1:]
return res
>>> list(split([2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4]))
[[1, 2], [1, 2, 3], [1, 2, 3, 4]]