日常生活の中でたくさんの情報を管理する場合には、表やリストにして扱うことがありますね。プログラムの世界でも、同じようにデータをひとかたまりにして扱う仕組みがあります。今回はリストを見ていきましょう。
a=2
b=6
c=4
avg=(a+b+c)/3
以下は、整数を要素に持つリストaを定義した例です。中に入るデータのことを要素といいます。
a=[2, 6, 4, 3, 2, 4]
リストの末尾に要素を追加するにはappend()を使います。このように、リストにはあとから要素を追加できることが大きなメリットです。
逆に、不要な要素を削除するには del を使います。del は変数を削除するものですが、リストの要素に対しても使うことができます。
2つのリストを連結して新たなリストを作ることができます。二項演算子の+を使います。
リストの長さはlen()で知ることができます。
なお、リストに何も要素が入っていない、つまり空っぽのリストの場合は長さ0になります。
リストに含まれる要素のうち最大のもの、最小のものを求めるには、max()とmin()を使います。
数値からなるリストの合計値を求める場合にはsum()を使います。
指定した要素がリストに含まれるかを調べるには in を使います。含まれていれば真を返します。
リストの要素に代入を行うことで置き換えることもできます。
range(n) # 0以上、n未満の整数の範囲
range(m, n) # m以上、n未満の整数の範囲
range(m, n, k) # m以上、n未満であり、kごとの整数の範囲
for文で処理を10回繰り返したい!なんて場合には、range(10)を使えば良いですね。以前に紹介したwhile文とループ変数を組み合わせるよりずっと簡単に書くことができます。
なお、range()で作られた数の範囲は、list()を使うことでリストに変換することができます。
range()で作ることができるのは一定間隔の数の列でした。これを応用することで、奇数の列や偶数の列、3の倍数の列などを作ることができます。ちょっと数学的にいうと等差数列になる列ですね。
例えば奇数の列は、初項が1、公差が2の等差数列であり、その一般項は
an = 1 + 2n
となります。なお、ここではn=0,1,2,… であり、初項はn=0であるとします。これは、
list( range(1, 10, 2) )
などとして作ることができます。
それでは、初項が1、公比が2の等比数列となるとどうでしょうか。
こうしたリストを作るときには内包表記という手法が使えます。これは、リストとfor文の組み合わせのようなもので、以下のように記述します。
図 内包表記の書き方
リストから要素を1つずつ取り出してループするところはこれまで見てきたfor文と同じです。内包表記では、取り出した要素を用いた式を評価し、その内容が新しいリストの要素となるのです。
先ほどの等差数列の例を見てみましょう。
式の部分には 1+2*i とあります。これは先ほどの等差数列の一般項ですね。
つまり、range(10)で作り出した 0,1,2,3,… という整数列を添え字とした一般項を計算し、その結果からなるリストを作っていることになります。
この仕組みを使って等比数列を作ってみましょう。
式の部分が 1*2**i になっています。これは等比数列の一般項です。なお、pythonにおけるべき乗の記号は ** です。
内包表記は、数値に限らず文字列など他の型でも使うことができます。
文字列を対象とした例を見てみましょう。
これは、文字列のリストの内容を大文字化したリストを作るものです。
また、次の例は、数値を書式化した文字列のリストを作るものです。
冒頭に示した平均値を計算する処理をリストを使って作ってみましょう。
numbers = []
x = int(input("数字を入力してください"))
numbers.append(x)
while x != 0:
x = int(input("数字を入力してください。終わるときは0を入力してください"))
if x != 0:
numbers.append(x)
avg = sum(numbers) / len(numbers)
print("平均値", avg)
入力を受け付ける処理は以前にやったときと同じものです。入力された値はリストに追加していきます。0を入力するとデータの終わりとみなしています。最後に、sumで合計を求め、lenで求めたデータ数で割ることで平均値を求めています。
それでは実行してみましょう。
別の例として、カンマ区切りの数値データを読み込んで合計値を求める例です。
カンマ区切りとはその名前のとおり、カンマで区切られた数値が並んでいるデータ形式です。
12,34,56,78
例 カンマ区切りデータ
この各数値を合計する処理は以下のように作ることができます。
ここでは、カンマ区切りデータとして1行のテキストがあったとして、これをカンマで分解してリストにし、それを内包表記で数値にし、さらにsumで合計しています。
- リストにより、複数のデータを1つの列として扱うことができる。
- リストにはいろいろな操作が準備されている。
- for文により、リストの各要素に対して処理を行うことができる。
- range()により規則性のある数字の列を作ることができ、これはリストと似た性質がある
- 内包表記により、リストに対する演算の結果からなるリストを作ることができる。
- リストはとにかく奥が深い。
コメント