Я хотел бы иметь функцию, которая разбивает мой список на подсписки, а затем эти подсписки на дополнительные подсписки, согласно этой схеме. Количество вложений и размер_блока будут различаться. Пожалуйста, помните о [4] и [9] в lst2, это важно.
block_sizes = [5, 2, 1]
my_lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
# desired return
lst1 = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11]] # chunked into sublists of size 5
lst2 = [[0, 1], [2, 3], [4], [5, 6], [7, 8], [9], [10, 11]] # chunked into sublists of size 2; be aware of [4] and [9]
lst3 = [[0], [1], [2], [3], [4], [5], ... [11]]
Я уже пробовал это, но блок не работает должным образом:
block_sizes = [5, 2, 1]
def chunk_into_list(lst, chunk_size):
return [lst[i:i + chunk_size] for i in range(0, len(lst), chunk_size)]
for i, block_size in enumerate(block_sizes):
for step in range(len(block_sizes[:(i + 1)])):
my_lst = chunk_in_sizes(my_lst, block_sizes[step])
print(my_lst)
Но это приводит к:
[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11]]
[[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]], [[10, 11]]]
[[[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]], [[[10, 11]]]]
Я буду использовать это для моделирования, поэтому эффективность будет важна, если это возможно.