Pythonでfor文の中にfor文を書く多重for文の解説

Pythonでforの中にforを書く多重for文の解説

今回はPythonのfor文の基本的な説明です。特にfor文の中にfor文を書く、多重for文(?)の解説です。

以下のようなfor文ですね。

for i in A:
    for j in B:
        処理

このようなfor文を見たことがあると思います。forの中にforがあるやつです。

まずは一番基本的な、forが1つだけのものをおさらいしておきましょう。

Pythonの基本的なfor文の使い方

①具体例

次のコードを見て下さい。

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文を使ったコードを見ていきましょう。

Pythonの基本的な二重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の値 実行結果
100iは0、jは0
201iは0、jは1
302iは0、jは2
400iは1、jは0
511iは1、jは1
612iは1、jは2
720iは2、jは0
821iは2、jは1
922iは2、jは2
1030iは3、jは0
1131iは3、jは1
1232iは3、jは2
  • iが0から3までの4パターン
  • その1つずつに対してjが3パターンずつ

よって合計で4×3=12パターンの組み合わせとなっていますね。

Pythonの三重for文

それでは最後におまけとして三重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

ここでは、

  • iの値が0から3までの整数で4パターン
  • そのiの値の1つずつに対してjが3パターンずつ
  • さらにそのjの値の1つずつに対してkが2パターンずつ

よって、合計で4x3x2=24パターンとなっていることに注意してください。

このことは言い換えると、各iの値はそれぞれ6パターンのjとkの組み合わせを持っていると言えます。これは上の実行結果を見てもらうとわかってもらえると思います。

最初のうちは、もしforの中にさらにforを埋め込むのがわかりにくくなったときは、上のように一度各変数が取る値の組み合わせと実行結果について表を描いてみる(手書き)とわかりやすくなると思いますし、ミスも減ると思います。

いかがだったでしょうか。Pythonにおける多重for文の基本的なイメージはつかめてもらえたでしょうか。何かのお役に立てれば幸いです。

やっぱりプログラミングは独学だとわかりにくいですよね、そこでスクールや動画による解説を利用しましょう!

Tech Academy

厚切りジェイソンのCMでおなじみのプログラミングスクール。自宅でオンライン受講OK。現役のプロが一人一人に専属メンターになってくれ、質問すればすぐに回答。転職保証あり

Udemy

世界最大級のオンライン学習動画サービス。AI・データサイエンスなど最先端のプログラミング講座からビジネススキル講座まで10万以上の講座から選び放題。講師に掲示板から直接に質問もできる。