配列
配列
5 人の生徒の数学の点数をそれぞれ 96 点、56 点、42 点、74 点、86 点とします。この平均点を求めるプログラムを書いてみましょう。
一応、作ることができましたが、生徒の数が増えてしまうと大変です。前項の for 文を使うと簡単にできそうですが変数を for 文ではうまく扱えないので、繰り返し処理を用いて書くことができません。
ここで、配列を使います。配列は、複数のデータを順番に並べたもので、大量のデータを扱うことができます。数学におけるベクトルと同じようなものです。
配列を用いると、先程のプログラムは、次のように書くことができます。※詳しい説明は後でします。
さらに、for 文を用いることができるようになり、次のように簡単にかつ応用の利く形で書くことができます。
配列について、詳しく見ていきましょう。
配列は、次のような構文で作ることができます。
配列名 = [一つ目のデータ, 二つ目のデータ, 三つ目のデータ, ..., nつ目のデータ]
配列から、i
番目のデータを取り出すときは次のようにして取り出すことができます。ここで、i - 1
となっているのは、配列の添字は 0 から始まっているからです。
配列名[i - 1]
配列の長さは、次のようにして取得することができます。
len(配列名)
次の例題を解いてみてください。
例題
一人目の点数を 96 点から 37 点に書き換えてみましょう。5 人の点数は、scores = [96, 56, 42, 74, 86]
のように与えられます。
配列の添字には、変数を使うこともできます。これを用いて、さきほどの問題をさらに一般化した問題を解いてみましょう。
例題
i
人目の点数を laterScore
に書き換えるプログラムを作って、実際に i
に 1、laterScore
に 37 を入力して、先程と同じようになるか試してみましょう。
実は for 文を書くときに出てきた range は、配列のようなものを作る関数です。ここで、配列のようなものと言ったのは厳密には配列ではないからですが、ひとまず配列と考えて問題ないでしょう。そのため、例えば range(1, 11)
は [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
を生成します。list 関数は range 関数の返り値を配列にしています。
前項の練習問題の解答で sum(range(1, 11))
のような別解がありましたが、sum 関数は与えられた配列の和を求める関数なので、これは range 関数で 1 から 10 までの配列を作り、それの和を sum 関数で求めていたということです。
練習問題 1
生徒の英語の点数が書かれた配列を受け取って、その平均点を返す関数を作ってみましょう。 実際に、点数をそれぞれ 26 点、78 点、83 点、20 点、10 点、11 点、22 点、16 点、41 点、95 点として計算してみましょう。
ヒント
個のデータを 、平均点を とすると、次のようにして求められるのでした。
解答
練習問題 2
今度は、分散を求めるプログラムを書いてみましょう。
個のデータを 、平均を とすると、分散 は次のように与えられるとします。
練習問題 1 と同じように具体的な値を入れて確かめてみましょう。
解答
次のようにしても計算できますが(variance
関数の中が少し変わっています。)、for 文の中が実行される度に average
関数が実行されて計算量が多くなってしまうので、上のようにした方が良いでしょう。
実は、分散を計算するライブラリがあります。statistics ライブラリの pvariance 関数やNumPy ライブラリの var 関数があります。
練習問題 3
最高点を求めるプログラムを作ってみましょう。