Pythonで複数のforループを1行で書く方法
コード
インデックスiが2まで、jが4まで繰り返されることを望むなら、for文を次のように書けばいい。
>>> for i in range(3):
... for j in range(5):
... if j == 4:
... print((i,j))
... else :
... print((i,j), end="")
...
(0, 0)(0, 1)(0, 2)(0, 3)(0, 4)
(1, 0)(1, 1)(1, 2)(1, 3)(1, 4)
(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)
標準ライブラリのitertools
からproduct()
を使用すると、上記のような動作をするfor文を1行で処理できる。
>>> for i, j in itertools.product(range(3), range(5)):
... if j == 4:
... print((i,j))
... else :
... print((i,j), end="")
...
(0, 0)(0, 1)(0, 2)(0, 3)(0, 4)
(1, 0)(1, 1)(1, 2)(1, 3)(1, 4)
(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)
zip()
と一緒に使うと、次のような繰り返し文を実装できる。
>>> for i,(j,k) in zip(range(3**2), itertools.product(range(3), range(3))):
... print(i,j,k)
...
0 0 0
1 0 1
2 0 2
3 1 0
4 1 1
5 1 2
6 2 0
7 2 1
8 2 2
環境
- OS: Windows10
- Version: Python 3.9.2