Функция chunks() с yield, при вызове list(chunks())

Есть список. При попытке преобразовать его в один список с вложенными списками по n-элементов, метод next(chuks()) -два раза возвращает первых n элементов , а вот когда мы используем list(chunks()) возвращается правильный результат (список с вложенными списками по 10 элементов ) Почему вызов функции с yield через list() возвращает полный список , а не первые 10 элементов? Я не могу дойти самостоятельно до этого ... Как именно формируется список в конце, при вызове list(chunks(list_int, 10)) ?

list_int= [i for i in range (0, 100 ,2)]


def chunks(lst, n):       
    for i in range(0, len(lst), n):
         yield lst[i:i + n]

next(chunks(list_int, 10))
next(chunks(list_int, 10)) #второй вызов возвращает тот же результат 

list(chunks(list_int, 10)) # возвращает правильный результат / [[0, 2, 4, 6, 8, 10, 12, 14, 16, 18], [20, 22, 24, 26, 28, 30, 32, 34, 36, 38], [40, 42, 44, 46, 48, 50, 52, 54, 56, 58], [60, 62, 64, 66, 68, 70, 72, 74, 76, 78], [80, 82, 84, 86, 88, 90, 92, 94, 96, 98]]

Ответы (1 шт):

Автор решения: SergFSM

в документации сказано, что конструктор list принимает аргумент поддерживающий итерацию или объект итератор, отсюда и получается нужный вам результат.

примерно то же самое как:

list_int = [i for i in range (0, 100 ,2)]
n = 10

def chunks(lst, n):       
    for i in range(0, len(lst), n):
         yield lst[i:i + n]

chunk = chunks(list_int, n)
res = [next(chunk) for _ in range(len(list_int)//n)]

# или так res = [i for i in chunk]

вывод:

[[0, 2, 4, 6, 8, 10, 12, 14, 16, 18],
 [20, 22, 24, 26, 28, 30, 32, 34, 36, 38],
 [40, 42, 44, 46, 48, 50, 52, 54, 56, 58],
 [60, 62, 64, 66, 68, 70, 72, 74, 76, 78],
 [80, 82, 84, 86, 88, 90, 92, 94, 96, 98]]
→ Ссылка