Остановить генератор
Функция генерирует определённую последовательность чисел в виде списка списков. Вопрос, как остановить этот генератор, когда длинна основного списка будет больше двух.
def subset_sum(numbers, target, partial=[], partial_sum=0):
s = [i**2 for i in partial]
if sum(s) == target**2:
yield partial
if sum(s) >= target**2:
return None
for i, n in enumerate(numbers):
remaining = numbers[i + 1:]
yield from subset_sum(remaining, target, partial + [n], partial_sum + n)
print(list(subset_sum(range(50, 0, -1),50)))
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
itertools.islice решает нужную задачу:
import itertools
def subset_sum(numbers, target, partial=[], partial_sum=0):
...
print(list(itertools.islice(subset_sum(range(50, 0, -1), 50), 2)))
$ python subset_sum.py [[50], [49, 8, 5, 3, 1]]