24

私はしばしばこれをやっていることに気づきます:

for x in range(x_size):
    for y in range(y_size):
        for z in range(z_size):
            pass # do something here

Pythonでこれを行うより簡潔な方法はありますか? の線に沿って何かを考えています

for x, z, y in ... ? :
4

4 に答える 4

40

itertools.productを使用できます:

>>> for x,y,z in itertools.product(range(2), range(2), range(3)):
...     print x,y,z
... 
0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
于 2012-12-14T19:44:17.767 に答える
8

numpyすでに依存関係を持っている場合は、うまくいきますnumpy.ndindex...

>>> for x,y,z in np.ndindex(2,2,2):
...     print x,y,z
... 
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
于 2012-12-14T19:42:40.800 に答える
7

使用itertools.product():

import itertools
for x, y, z in itertools.product(range(x_size), range(y_size), range(z_size)):
    pass # do something here

ドキュメントから:

入力イテラブルのデカルト積。

ジェネレーター式のネストされた for ループと同等です。
...

于 2012-12-14T19:44:33.307 に答える
0

ループ内にあるものによって異なります。リストを扱う場合は、リスト内包表記を使用できる場合があります

より一般的なケースについては、itertools に関するこの投稿を参照してください。

于 2012-12-14T19:44:46.193 に答える