【初心者解説】Pythonのfor文と配列、その基本と注意点

Pythonの初心者向け解説。for変数と配列との関係について。

Pythonのfor文を配列と関連づけて使う場合の基本と注意点について、超初心者に向けて解説です。簡単なコードを例に出して解説します。私もプログラミング未経験の超初心者ですので、 復習と備忘録も兼ねています。

なお私の環境は主に次の通りです。

  • Python3.7.3
  • Atom
  • Anaconda



目次

1.配列が持つ3種類の情報:要素そのもの、個数、そして順番・順序

2.初心者がつまづきやすい?for文の変数iとの関係性

3.まとめ




1.配列が持つ3種類の情報

Pythonの配列が持つ情報には、次の3種類の情報が含まれています。

  • 各要素の中身
  • 要素の個数
  • 要素の順番

順番に見ていきましょう。

各要素そのもの

このコードを見てください。まず1行目で配列を作り出して、変数aに入れました。aという名前の配列を作成したわけです。


次に2行目で、配列aの要素の数を、list_numという変数に入れています。len(a)という関数を使うと、指定した名前の配列の要素の個数を数えてくれます。

4行目では、その個数を表示しています。

そして6行目~7行目では、for文を使って配列aの中身を順番に1つずつ表示しています。配列aの各要素を1つずつiという変数に代入し、そのiを表示するという処理です。

配列aはまず「1」という数字が最初に存在しているので、まず1がiに入り、「1」が表示されます。それが終れば次に、配列aには「2」という数字があるので、2がiに入り、「2」が表示されます。これを「8」まで8回続けるわけです。

さて、私の環境でこのコードを実行するとこんな感じになります。

最初にlist_numの8が、そして、以降は配列aの中身、すなわち数字の1~8が順番に表示されていることがわかると思います。ようするに、配列はその各要素の中身そのものという情報を持っているわけです。

要素の個数

また、上述のようにlen()使うと、配列aの要素の個数がわかりますので、そもそも配列は要素の個数という情報を持っていることがわかります。

要素の順番・順序

そしてもう1つ配列が持っている情報があります。それが順番・順序です。●●という要素は何番目なのか?という情報です。

上述配列aでは、各要素の中身が1~8までの数字なので、それ自体が順番という情報と自動的に結び付けて考えてしまいますが、

  • 中身が何かという情報
  • 要素の並び方のルール(つまり順番・順序)という情報


これら2つは本来別次元の情報ですので、両者はそれぞれ独立した情報として考えなければなりません。以下、具体的に見てみましょう。



2.初心者がつまづきやすい?for文の変数iとの関係性

さて、今度は配列が持つ、「要素の順番・順序」という情報と、for文の変数iとの関係について考えていきましょう。まずは以下のコードを見てください。

1行目~7行目まではさっきのコードと全く同じです。違うのは8行目と9行目です。新たにifとbreakを使ったコードを加えました。

これを実行するとこんな感じなります。

一番上の8はさっきの実行結果の画像と同じですが、その下が異なります。さっきの実行結果はその部分が「1~8」の数字が並んでいましたが、今回は「1~6」になっています。2つの画像を並べてみます。

向かって左がさっきまでのもの、右が新しいコードのものです。

ここでもう1度新しいソースコードを見てみましょう。



8行目では、「i>list_num-3」によって、「i>5」(list_num=8)となります。ゆえに、iが6以上のときは、処理が終わり(break)となります。

ところが、画像をもう1度みてましょう。

最初の「8」は繰り返しfor文とは無関係なので無視して、for文の実行結果は1~6まで数字が並んでいます。7と8が消えています。

しかし、i>5なので、iが6,7,8の3つ場合は処理が止まり、配列の最後から3つの数字、つまり「6」、「7」、「8」が消えるのではないか?とも考えられます。でも、消えているのは「7」と「8」という2つの数字だけ……ここに初心者が戸惑う注意点なのですね。

このズレには、配列が持つ情報の1つ、「順番・順序」という情報が関係しています。すなわち配列の順番は、「0番目」から始まるということです。つぎの表を見てください。

順番(何番目か)01234567
要素(中身の数字)12345678

配列は「0番目」から始まるゆえに、要素の中身である数字と1つずつ差が生じます。ただし、順番という情報も、要素の個数もともに8個というのは同じです。よって、上記for文は8回繰り返されます。

また同様に、実はPythonのfor文の変数(ここでいうi)もまた、初期値はゼロ。つまりゼロから始まります。よって、for変数iと、配列の順番という情報は一致します。

すなわち最初のコードは、

i01234567
配列の順番01234567
表示結果12345678

ということになります。iという変数には「配列の順番」という情報が入ります。よって、iも配列という性質を持つことになるわけです。

したがって、

  • i=0のときは、配列aの0番目の要素「1」を表示
  • i=1のときは、配列aの1番目の要素「2」を表示
  • i=2のときは、配列aの2番目の要素「3」を表示
  • 以下同じ

ということになります。

それゆえに2つ目のif~を加えたもコードでは、iが6以上のところがなくなるため、数字「7」と「8」が表示されないということになります。

3.まとめ

このようにfor文の変数と配列を関連づけて使う場合は、

  • 繰り返しの回数=配列の要素の個数
  • 繰り返し最初は「ゼロ」回目=配列の最初の順番は「ゼロ」番

という2点に気を付けなければなりません。私のようなプログラム未経験者が勉強する場合、この点が忘れがちなので注意したいところです。