генератор для a, b, aa, ab, ba, bb, aaa, aab - PullRequest
0 голосов
/ 30 сентября 2019

This:

import itertools

gen1 = itertools.product('ab', repeat=3)
for i in gen1:
    print(''.join(i), end=' ')

печатает это:

aaa aab aba abb baa bab bba bbb 

, но я также хочу, чтобы он генерировал a b aa ab ba bb. Я могу сделать это с помощью:

import itertools

for i in range(1, 4):
    gen2 = itertools.product('ab', repeat=i)
    for j in gen2:
        print(''.join(j), end=' ')

, который печатает это:

a b aa ab ba bb aaa aab aba abb baa bab bba bbb 

Есть ли более элегантный способ получить этот вывод с помощью одного генератора? Что-то вроде:

import itertools

gen3 = (your code here)
for i in gen3:
    # prints forever in the pattern: a b aa ab ba bb aaa aab aba abb baa bab bba bbb
    print(''.join(i), end=' ')

1 Ответ

1 голос
/ 30 сентября 2019

Я бы связал несколько итераторов вместе:

from itertools import chain, product


gens = chain.from_iterable(product('ab', repeat=i) for i in range(1,4))
for i in gens:
  print(''.join(i), end=' ')

При необходимости это можно расширить до бесконечной последовательности значений, заменив range(1,4) на itertools.count(1).

ЕслиВаш комментарий «печатает навсегда» означает, что вы хотите вернуться к a после bbb, а затем заключить в цепочку итераторы в itertools.cycle.

...