メインコンテンツまでスキップ

配列

配列

5 人の生徒の数学の点数をそれぞれ 96 点、56 点、42 点、74 点、86 点とします。この平均点を求めるプログラムを書いてみましょう。

Open In Colab

一応、作ることができましたが、生徒の数が増えてしまうと大変です。前項の for 文を使うと簡単にできそうですが変数を for 文ではうまく扱えないので、繰り返し処理を用いて書くことができません。

ここで、配列を使います。配列は、複数のデータを順番に並べたもので、大量のデータを扱うことができます。数学におけるベクトルと同じようなものです。

配列の説明

配列を用いると、先程のプログラムは、次のように書くことができます。※詳しい説明は後でします。

Open In Colab

さらに、for 文を用いることができるようになり、次のように簡単にかつ応用の利く形で書くことができます。

Open In Colab

配列について、詳しく見ていきましょう。

配列は、次のような構文で作ることができます。

配列名 = [一つ目のデータ, 二つ目のデータ, 三つ目のデータ, ..., nつ目のデータ]

配列から、i 番目のデータを取り出すときは次のようにして取り出すことができます。ここで、i - 1 となっているのは、配列の添字は 0 から始まっているからです。

配列名[i - 1]

配列の長さは、次のようにして取得することができます。

len(配列名)

次の例題を解いてみてください。

例題

一人目の点数を 96 点から 37 点に書き換えてみましょう。5 人の点数は、scores = [96, 56, 42, 74, 86] のように与えられます。

解答
Open In Colab

配列を出力してみると、確かに変更できたことが確認できます。

Open In Colab

配列の添字には、変数を使うこともできます。これを用いて、さきほどの問題をさらに一般化した問題を解いてみましょう。

例題

i 人目の点数を laterScore に書き換えるプログラムを作って、実際に i に 1、laterScore に 37 を入力して、先程と同じようになるか試してみましょう。

解答

添字が 0 から始まっていることに気をつけましょう。

Open In Colab
注記

実は for 文を書くときに出てきた range は、配列のようなものを作る関数です。ここで、配列のようなものと言ったのは厳密には配列ではないからですが、ひとまず配列と考えて問題ないでしょう。そのため、例えば range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] を生成します。list 関数は range 関数の返り値を配列にしています。

Open In Colab

前項の練習問題の解答で sum(range(1, 11)) のような別解がありましたが、sum 関数は与えられた配列の和を求める関数なので、これは range 関数で 1 から 10 までの配列を作り、それの和を sum 関数で求めていたということです。

Open In Colab
Open In Colab

練習問題 1

生徒の英語の点数が書かれた配列を受け取って、その平均点を返す関数を作ってみましょう。 実際に、点数をそれぞれ 26 点、78 点、83 点、20 点、10 点、11 点、22 点、16 点、41 点、95 点として計算してみましょう。

ヒント

nn 個のデータを x1,x2,,xnx_1,x_2,\dots,x_n、平均点を xˉ\bar{x} とすると、次のようにして求められるのでした。

xˉ=x1+x2++xnn=i=1nxin\bar{x}=\frac{x_1+x_2+\dots +x_n}{n}=\frac{\sum_{i=1}^n x_i}{n}
解答
Open In Colab

実は、平均点を求めるライブラリもあります。statistics ライブラリの mean 関数NumPy ライブラリの mean 関数があります。

Open In Colab
Open In Colab

練習問題 2

今度は、分散を求めるプログラムを書いてみましょう。

nn 個のデータを x1,x2,,xnx_1,x_2,\dots,x_n、平均を xˉ\bar{x} とすると、分散 s2s^2 は次のように与えられるとします。

s2=i=1n(xixˉ)2ns^2=\frac{\sum_{i=1}^n(x_i-\bar{x})^2}{n}

練習問題 1 と同じように具体的な値を入れて確かめてみましょう。

解答
Open In Colab

次のようにしても計算できますが(variance 関数の中が少し変わっています。)、for 文の中が実行される度に average 関数が実行されて計算量が多くなってしまうので、上のようにした方が良いでしょう。

Open In Colab

実は、分散を計算するライブラリがあります。statistics ライブラリの pvariance 関数NumPy ライブラリの var 関数があります。

Open In Colab
Open In Colab

練習問題 3

最高点を求めるプログラムを作ってみましょう。

解答
Open In Colab