Из предыдущего вопроса я узнал что-то интересное. Если Python itertools.product
будет снабжен серией итераторов, эти итераторы будут преобразованы в кортежи перед декартовым произведением. Связанные questions посмотрите на исходный код itertools.product
, чтобы сделать вывод, что, хотя промежуточные результаты отсутствуют хранящиеся в памяти, корневые версии исходных итераторов создаются до начала итерации продукта.
Вопрос: Есть ли способ создать итератор для декартова продукта, когда входы с корневым преобразованием слишком велики для хранения в памяти? Тривиальный пример:
import itertools
A = itertools.permutations(xrange(100))
itertools.product(A)
Более практичный случай использования займет в серии (*iterables[, repeat])
, как и исходная реализация функции - вышеприведенный пример. Это не похоже на то, что вы можете использовать текущую реализацию itertools.product
, поэтому я приветствую ее в представлении в чистом питоне (хотя вы не можете использовать бэкэнд из itertools
!).