2015-03-29 4 views
1

Для начала, я прочитал это: all permutations of a binary sequence x bits longPython: Получение бинарных перестановок, но контроль контура потока

Это похоже на то, что я хочу, но я не хочу, чтобы генерировать все перестановки заранее. Я хочу больше генератора, который я могу выполнить и остановить, когда захочу (по соображениям эффективности, у меня есть условия отсечения, когда я хочу остановиться).

Мне было интересно, есть ли элегантный способ сделать это Python. Ответы на вопрос прежде всего касались «.join», но я не думаю, что это будет работать здесь. Я предполагаю, что мне нужно использовать itertools.

Любые идеи?

+1

Python имеет _very_ элегантные генераторы. Просто Google "генератор питона". – alexis

+0

@alexis Это интересно: https://wiki.python.org/moin/Generators. Тем не менее, я никогда раньше не работал с генераторами, не возражаете ли вы показать мне, как это будет работать в моем случае? –

+1

[Учебник python] (https://docs.python.org/3/tutorial/classes.html#generators) - это место для начала. Но см. Мой ответ. – alexis

ответ

4

Поскольку вы, как решение в ответ вы ссылка, вот эта версия генератора:

for pattern in ("".join(seq) for seq in itertools.product("01", repeat=3)): 
    ... 

Использование скобок вместо квадратных скобок [ ... ] дает генератор, который создает значения по требованию.

Легко превратить почти любую функцию в генератор; см. the python tutorial для деталей.

+0

Отлично, спасибо. Теперь я знаю о генераторах, они кажутся очень удобными. –

Смежные вопросы