Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はPythonのfor文の基本的な説明です。特にfor文の中にfor文を書く、多重for文(?)の解説です。
以下のようなfor文ですね。
for i in A:
for j in B:
処理
このようなfor文を見たことがあると思います。forの中にforがあるやつです。
まずは一番基本的な、forが1つだけのものをおさらいしておきましょう。
次のコードを見て下さい。
for i in range(0, 4):
print(i)
これを実行すると、
0
1
2
3
となります。
非常にシンプルなコードですが、一応解説をしておきます。
まず、inの後のrange(0, 4)によって、整数0から3までの整数の数列(リストのようなもの)が作られます。
↓
iに0(ゼロ)が代入される。
↓
i=0となり、print(0)が実行される。
↓
iに1が代入される。
↓
i=1となり、print(1)が実行される。
(以下略)
という感じですね。
では、これを踏まえて今度はこのfor文の中にもう1つfor文を使ったコードを見ていきましょう。
for i in range(0, 4):
for j in range(0, 3):
print(f'iは{i}、jは{j}')
これを実行した結果は、
iは0、jは0
iは0、jは1
iは0、jは2
iは1、jは0
iは1、jは1
iは1、jは2
iは2、jは0
iは2、jは1
iは2、jは2
iは3、jは0
iは3、jは1
iは3、jは2
となります。
もう一度上と同じコードを見てもらいましょう。
for i in range(0, 4):
for j in range(0, 3):
print(f'iは{i}、jは{j}')
(print関数で使っている『f’~’』という部分は、フォーマット済み文字列リテラルという便利な機能を使っています。Python 3.6から追加された新機能です)
inの後のrange(0, 4)によって、0、1、2、3という4つの整数の数列が作られます。
↓
まずiに0が代入される。
↓
i=0となる。
↓
次にfor j~の文について処理が始まる。
↓
range(0, 3)によって、0, 1, 2という3つの整数の数列ができあがる。
↓
jに0が代入される。
↓
j=0となる。このときi=0でもあるので、「iは0、jは0」と出力されます。
ここで処理は終わりません。jについてfor j in~がまだ続きます。
↓
jに1が代入される。
↓
j=1となる。このときもi=0のままなので、「iは0、jは1」と出力されます。
↓
jに2が代入される。
↓
j=2となる。このときもi=0のままなので、「iは0、jは2」と出力されます。
↓
ここでi=0の場合の処理がいったん終わります。そこで、ところがiについても、for i in~がありますので、次にi=1の場合の処理、つまり、またjに0~2の整数が順番に代入され、それぞれの処理がはじまります。
↓
i=1の場合として、jに0が代入される。
↓
j=0となる。このときi=1のままなので、「iは1、jは0」と出力されます。
↓
jに1が代入される。
↓
j=1となる。このときもi=1のままなので、「iは1、jは1」と出力されます。
↓
jに2が代入される。
↓
j=2となる。このときもi=1のままなので、「iは1、jは2」と出力されます。
ここで、i=1の場合の処理がいったん終わります。そして次にまたi=2の場合の処理がはじまります。
もちろんi=2として、jにまた0~2が順番に代入され、そのたびに処理が実行されていきます
i=2以降の流れは省略します。
この処理の流れとi, jの値、そして実行結果を一覧表にすると次のようになります。
処理の順番 | iの値 | jの値 | 実行結果 |
---|---|---|---|
1 | 0 | 0 | iは0、jは0 |
2 | 0 | 1 | iは0、jは1 |
3 | 0 | 2 | iは0、jは2 |
4 | 1 | 0 | iは1、jは0 |
5 | 1 | 1 | iは1、jは1 |
6 | 1 | 2 | iは1、jは2 |
7 | 2 | 0 | iは2、jは0 |
8 | 2 | 1 | iは2、jは1 |
9 | 2 | 2 | iは2、jは2 |
10 | 3 | 0 | iは3、jは0 |
11 | 3 | 1 | iは3、jは1 |
12 | 3 | 2 | iは3、jは2 |
よって合計で4×3=12パターンの組み合わせとなっていますね。
それでは最後におまけとして三重for文もやっておきましょう。
for i in range(0, 4):
for j in range(0, 3):
for k in range(0, 2):
print(f'iは{i}、jは{j}、kは{k}')
これの実行結果はこうなります。
iは0、jは0、kは0
iは0、jは0、kは1
iは0、jは1、kは0
iは0、jは1、kは1
iは0、jは2、kは0
iは0、jは2、kは1
iは1、jは0、kは0
iは1、jは0、kは1
iは1、jは1、kは0
iは1、jは1、kは1
iは1、jは2、kは0
iは1、jは2、kは1
iは2、jは0、kは0
iは2、jは0、kは1
iは2、jは1、kは0
iは2、jは1、kは1
iは2、jは2、kは0
iは2、jは2、kは1
iは3、jは0、kは0
iは3、jは0、kは1
iは3、jは1、kは0
iは3、jは1、kは1
iは3、jは2、kは0
iは3、jは2、kは1
ここでは、
よって、合計で4x3x2=24パターンとなっていることに注意してください。
このことは言い換えると、各iの値はそれぞれ6パターンのjとkの組み合わせを持っていると言えます。これは上の実行結果を見てもらうとわかってもらえると思います。
最初のうちは、もしforの中にさらにforを埋め込むのがわかりにくくなったときは、上のように一度各変数が取る値の組み合わせと実行結果について表を描いてみる(手書き)とわかりやすくなると思いますし、ミスも減ると思います。
いかがだったでしょうか。Pythonにおける多重for文の基本的なイメージはつかめてもらえたでしょうか。何かのお役に立てれば幸いです。
プログラミングを学びIT業界へ転職するなら現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのが良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。
など各種の講座が用意されています。無料で体験できるテックアカデミー無料体験も用意されています。