假设我有一个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
部分帮助。它应该在哪里?如何避免嵌套生成器?理由是我想对它们进行迭代。但是由于整个空间太大,我不想生成所有的结果,然后再将它们存储并迭代整个字典列表。我考虑使用以下递归过程,但我需要一些关于
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
即可,不改变原意,让语言更加通俗易懂。 - jfaccioni