В основном я ищу реализацию itertools.product
, которая позволяет мне изменить порядок создания комбинаций.Попытка всех возможных комбинаций в динамическом порядке
Пример: Если я использую itertools.product('AB', 'xy')
он генерирует комбинации в указанном порядке:
[('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y')]
мне нужна реализация, которая отвечает на запросы, как «Пожалуйста, измените А до В следующий», например, как это:
>>> generator = DynamicOrderProduct({'var1': 'AB', 'var2': 'xy'})
>>> generator.first()
{'var1': 'A', 'var2': 'x'}
>>> generator.change('var1')
{'var1': 'B', 'var2': 'x'}
>>> generator.change('var2')
{'var1': 'B', 'var2':, 'y'}
>>> generator.change('var2') # here it can't generate a new combination by
# changing var2, so it changes var1 instead
{'var1': 'A', 'var2': 'y'}
>>> generator.change('var2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
в идеале, генератор будет принимать список переменных, как это:
generator.change(['var1', 'var2'])
Затем следует попытаться изменить значение var1
, и если это невозможно, вместо этого измените значение var2
и т. Д.
Как я могу реализовать это? Есть ли что-то в стандартной библиотеке, которая может мне помочь?