リスト

2.4. リスト#

同じ性質を持つデータが増えると、それらのデータを個別の変数に代入して処理するのは非効率です。このとき、リストlist)と呼ばれるデータ型data type)を使います。リストは、関連する複数のデータを 1 つにまとめて扱えるため、データ管理が容易になります。具体例を使って、リストの便利さを見ていきましょう。

秋のある日、どんぐりを 5 つ拾いました。それぞれの重さを測定したところ、2.80g、2.54g、2.28g、2.33g、2.41g であることがわかりました。これらの平均を計算してみます。まずは、これまでに学んだ知識を活用して、個々の重さを変数に保存し、合計と平均を計算してみましょう。

acorn_1_weight = 2.80
acorn_2_weight = 2.54
acorn_3_weight = 2.28
acorn_4_weight = 2.33
acorn_5_weight = 2.41

weight_sum = acorn_1_weight + acorn_2_weight + acorn_3_weight + acorn_4_weight + acorn_5_weight
weight_ave = weight_sum / 5

weight_ave
2.472

どんぐりが 5 個ならこの方法でも可能ですが、数が増えるとこの方法は扱いにくくなります。そこで、リストを利用します。リストを作るときは、複数の値を , で区切り、全体を [] で囲みます。以下のコードは、5 つのどんぐりの重さをリスト acorn_weights に保存しています。

acorn_weights = [2.80, 2.54, 2.28, 2.33, 2.41]

代入された値を表示させると、次のように出力されます。

acorn_weights
[2.8, 2.54, 2.28, 2.33, 2.41]

リストに含まれる各値のことを要素element)といいます。リストに含まれる全要素の数を、そのリストのサイズsize)、長さlength)、あるいは要素数といいます。リストのサイズを調べるには len 関数を利用します。

len(acorn_weights)
5

リスト内のすべての要素の合計を求めるときは sum 関数が便利です。

sum(acorn_weights)
12.36

lensum を組み合わせれば、次のように平均を簡単に計算できます。リストを使うと、コードがシンプルになり、誤入力のリスクも減らせます。

acorn_weight_ave = sum(acorn_weights) / len(acorn_weights)
acorn_weight_ave
2.472

また、min 関数や max 関数を使えば、リストの最小値や最大値も簡単に取得できます。

min(acorn_weights)
2.28
max(acorn_weights)
2.8

なお、Python の基本関数の中で、リストに含まれる要素の平均や分散を直接計算できる関数はありません。これらの計算を行うには、統計計算用のモジュールである statistics を利用します。math モジュールと同様に、import 文で statistics モジュールを読み込んでから使います。

import statistics

これで statistics に実装されているさまざまな統計計算用の関数を利用できるようになります。例えば、平均と分散を計算するには、それぞれ mean および variance 関数を使います。

statistics.mean(acorn_weights)
2.472
statistics.variance(acorn_weights)
0.04326999999999998

練習問題 DL-1

変動係数Coefficient of Variation)は、標準偏差 \(\sigma\) を平均値 \(\mu\) で割った値です。

\[ \text{CV} = \frac{\sigma}{\mu} \]

リスト x を受け取り、そのリストに含まれる要素の値の変動係数を計算するプログラムを作成してください。なお、標準偏差は分散の平方根です。

x = [2.80, 2.54, 2.28, 2.33, 2.41]
cv = None


print(cv)

変動係数

変動係数は、単位の異なるデータや、平均値の異なるデータ同士のばらつきを相対的に評価するために用いられます。たとえば、ネズミとゾウの体重のばらつきを比べる場合、単純に標準偏差だけを見れば、当然ゾウのほうが大きなばらつきを示すことになります。これは、そもそものスケール(平均体重)が大きく異なるためです。変動係数は、標準偏差を平均値で割ることで算出され、単位をも持たない割合としてばらつきを表現します。こうすることで、ネズミとゾウのような異なるスケールのデータでも、公平に比較することが可能になります。変動係数は、動物園でも使える思いやりのある統計量なのです。

上で紹介した lensum 関数は、リストに含まれるすべての要素に対して計算したりします。これに対して、リストから個別の要素を取り出したいときは [] を利用します。リストの変数名の後に [] を付け、括弧の中に取り出したい要素の位置を書きます。なお、位置は、リストの左から 0、1、2、・・・のように付けられています。例えば、リスト x の最初の要素を取得するには、x[0] のように使います。Python に限らずほとんどのプログラミング言語の世界では、モノを数えるときは 0 から数え始めます。

x = [2.80, 2.54, 2.28, 2.33, 2.41]
x[0]
2.8

リスト x の 2 番目の要素を取得するには、次のようにします。

x[1]
2.54

リストを使って、どんぐり販売所の価格管理システムを作ってみましょう。このどんぐり販売所では、以下の表にある 8 種類のどんぐりを販売しています。

どんぐり

値段

コナラ

100

ミズナラ

110

シラカシ

80

アラカシ

90

アベマキ

320

クヌギ

300

スタジイ

80

マテバシイ

180

これらの価格をリストで管理してみましょう。

prices = [100, 110, 80, 90, 320, 300, 80, 180]

次に、この価格管理システムを利用して価格計算をしてみよう。あるリスがコナラを 1 つ、クヌギを 2 つ、スタジイを 2 つ買ったとします。その合計金額を計算してみましょう。

Hide code cell content
total = prices[0] + prices[5] * 2 + prices[6] * 2
total
860

どうでしょうか。リストを使って価格を管理する場合、どのどんぐりがリストのどこにあるかを覚えておく必要があります。種類が少なければ、記憶力次第でなんとかなります。とはいえ、いちいち「コナラは何番目だったっけ?」と悩んでいたら、リスの行列に怒られてしまいます。もっとスマートな方法、あります。リスもびっくり、辞書の出番です。