有没有办法在使用嵌套循环时减少缩进,如下所示?
void
答案 0 :(得分:2)
for source_i in sources:
for source_j in sources:
pass
这与迭代sources
及其自身的笛卡尔积中的对相同。这可以通过导入itertools
:
import itertools
for (i,j) in itertools.product(sources, repeat=2):
pass
这里的模式相同:
for ni in i.nodes:
for nj in j.nodes:
pass
这可以改写为:
for (ni, nj) in itertools.product(i.nodes, j.nodes):
pass
现在你可以嵌套它们了:
import itertools
for (i,j) in itertools.product(sources, repeat=2):
for (ni, nj) in itertools.product(i.nodes, j.nodes):
if ni != nj:
do_thing(ni, nj)
答案 1 :(得分:2)
是的,替换嵌套循环的一种方法是使用itertools.product:
from itertools import product
for source_i, source_j in product(sources, repeat=2):
for ni, nj in product(source_i.nodes, source_j.nodes):
...
product
函数执行"笛卡尔输入可迭代产品" (直接来自文档)。