Попробуйте itertools.product
from itertools import product
for i, j in product(range(0, 501, 100), 'ABC'):
print(j, i)
Как говорят документы, product(A, B)
эквивалентно ((x,y) for x in A for y in B)
. Как видите, product
дает кортеж, что означает, что это генератор, и не создает список в памяти для правильной работы.
Эта функция примерно эквивалентна следующему коду: за исключением того, что фактическая реализация не создает промежуточные результаты в памяти:
def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
Но вы не можете использовать itertools.product
для бесконечного l oop из-за известной проблемы :
Согласно документации, itertools.product эквивалентен вложенным циклам for в выражении генератора. Но itertools.product (itertools.count (2010)) не является.
>>> import itertools
>>> (year for year in itertools.count(2010))
<generator object <genexpr> at 0x026367D8>
>>> itertools.product(itertools.count(2010))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
Входные данные для itertools.product должны быть конечной последовательностью конечных итерируемых элементов.
Для бесконечно l oop, вы можете использовать этот код .