Angenommen, ich habe eine Python-Liste, die Bereiche für einige Variablen darstellt:
conditions = [['i', (1, 5)], ['j', (1, 2)]]
Dies stellt dar, dass die Variable i
zwischen 1 und 5 liegt und innerhalb dieser Schleife j
zwischen 1 und 2 liegt. Ich möchte ein Wörterbuch für jede mögliche Kombination:
{'i': 1, 'j': 1}
{'i': 1, 'j': 2}
{'i': 2, 'j': 1}
{'i': 2, 'j': 2}
{'i': 3, 'j': 1}
{'i': 3, 'j': 2}
{'i': 4, 'j': 1}
{'i': 4, 'j': 2}
{'i': 5, 'j': 1}
{'i': 5, 'j': 2}
Der Grund ist, dass ich über sie iterieren möchte. Aber weil der gesamte Speicherplatz zu groß ist, möchte ich nicht alle generieren, speichern und dann diese Liste von Wörterbüchern durchlaufen. Ich habe überlegt, das folgende rekursive Verfahren zu verwenden, aber ich brauche Hilfe bei dem yield
Teil. Wo soll es sein Wie vermeide ich verschachtelte Generatoren?
def iteration(conditions, currentCondition, valuedIndices):
if currentCondition == len(conditions):
yield valuedIndices
else:
cond = conditions[currentCondition]
index = cond[0]
lim1 = cond[1][0]
lim2 = cond[1][1]
for ix in range(lim1, lim2 + 1):
valuedIndices[index] = ix
yield iteration(conditions, currentCondition + 1, valuedIndices)
Jetzt möchte ich in der Lage sein:
for valued_indices in iteration(conditions, 0, {}):
...
yield
mityield from
in der allerletzten Zeile Ihrer Funktion.