Grundsätzlich bin ich auf der Suche nach einer Implementierung von itertools.product
, die mir erlaubt, die Reihenfolge, in der die Kombinationen generiert werden, zu ändern.Alle möglichen Kombinationen in einer dynamischen Reihenfolge versuchen
Beispiel: Wenn ich itertools.product('AB', 'xy')
erzeugt es die Kombinationen in genau dieser Reihenfolge:
[('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y')]
Ich brauche eine Implementierung, die wie folgt auf Anfragen wie „Bitte ändern A nach B next“, zum Beispiel antwortet:
>>> 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
Idealerweise würde der Generator eine Liste von Variablen wie folgt akzeptieren:
generator.change(['var1', 'var2'])
Es sollte dann versuchen, den Wert von var1
zu ändern, und wenn das nicht möglich ist, ändern Sie stattdessen den Wert var2
und so weiter.
Wie würde ich das umsetzen? Gibt es etwas in der Standardbibliothek, die mir helfen kann?