使用Python嵌套循环时减少缩进

时间:2016-07-06 11:12:15

标签: python list python-3.x

有没有办法在使用嵌套循环时减少缩进,如下所示?

void

2 个答案:

答案 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函数执行"笛卡尔输入可迭代产品" (直接来自文档)。