Вот два возможных подхода.
Более «базовый», управление индексами «вручную»:
values = [(3, 50), (4, 20), (10, 30), (11, 60), (12, 70), (13, 20)]
lens = [2,4]
def slices1(values, lens):
out = []
index = 0
for length in lens:
out.append(values[index:index+length])
index += length
return out
print(slices1(values, lens))
# [[(3, 50), (4, 20)], [(10, 30), (11, 60), (12, 70), (13, 20)]]
Другой, с использованием итератора в списке и itertools.islice , чтобы получить из него последовательные кусочки:
from itertools import islice
def slices2(values, lens):
it = iter(values)
out = [list(islice(it,length)) for length in lens]
return out
print(slices2(values, lens))
# [[(3, 50), (4, 20)], [(10, 30), (11, 60), (12, 70), (13, 20)]]