いくつかの変数の範囲を表すPythonリストがあるとします。
conditions = [['i', (1, 5)], ['j', (1, 2)]]
これは、変数のi
範囲が1〜5で、ループ変数のj
範囲が1〜2であることを表しています。可能な組み合わせごとに辞書が必要です。
{'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}
その理由は、それらを繰り返し処理したいからです。しかし、スペース全体が大きすぎるため、それらをすべて生成して保存し、辞書のリストを反復処理することはしたくありません。次の再帰的な手順を使用することを考えましたが、そのyield
部分についていくつかの助けが必要です。どこにあるの?ネストされたジェネレーターを回避するにはどうすればよいですか?
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)
今私はできるようになりたいと思います:
for valued_indices in iteration(conditions, 0, {}):
...
yield
とyield from
、あなたの関数の非常に最後の行に。