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 izwischen 1 und 5 liegt und innerhalb dieser Schleife jzwischen 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 yieldTeil. 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, {}):
...
yieldmityield fromin der allerletzten Zeile Ihrer Funktion.