2

を使用して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 に答える