2

我知道可以使用同时访问两个集合

for i,j in zip([1,2,3],[4,5,6]):
    print i,j

1 4
2 5
3 6

我想做的是这样的:

for i,j in [[1,2,3],[4,5,6]]:
    print i,j

1 4
1 5
1 6
2 4
2 5
2 6
3 4
3 5
3 6

我希望 python 自动为我创建嵌套的 for 循环。当列表维度达到 5 或 6 时,我想避免在我的代码中使用许多嵌套的 for 循环。这可能吗?

4

3 回答 3

12

尝试

for i, j in itertools.product([1, 2, 3], [4, 5, 6]):
    print i, j
于 2011-01-23T21:53:40.547 回答
1
>>> [[x,y] for x in [1,2,3] for y in [4,5,6]]
[[1, 4], [1, 5], [1, 6], [2, 4], [2, 5], [2, 6], [3, 4], [3, 5], [3, 6]]

从结果列表中得到你想要的应该很容易。

于 2011-01-23T22:04:48.007 回答
0

我遇到过一些需要迭代的逻辑相当复杂的情况——所以你总是可以把它分解成它自己的生成器:

def it():
    i = 0
    for r in xrange(rows):
        for c in xrange(cols):
            if i >= len(images):
                return
            yield r, c, images[i], contents[i]
            i += 1

for r, c, image, content in it():
    # do something...

但通常我发现只是拼写简单的嵌套循环比混淆你正在循环的内容到对其他代码的调用要好。如果嵌套的循环超过 2-3 个,则代码可能无论如何都需要重构。

于 2011-01-23T22:20:00.287 回答