Python3入門|初心者対象!【第4回】リスト(list)を使いこなそう!


はじめに

Python3入門|初心者対象!シリーズの第4回目です!

今回はリスト(list)の使い方を解説します。

尚、過去のPython3入門|初心者対象!シリーズは下記リンクからご覧になれます。

リストの使い方をマスターしよう!

リスト(list)とは複数のデータを1つの変数で管理するための仕組みです。

普通の変数を一戸建ての家だとすると、リストはアパートのようなものです。

【リストのイメージ図】

リストのイメージ

このPython3入門|初心者対象!シリーズは原則としてプログラミング経験の無い方を対象としていますが、もしなんらかのプログラミング言語を学習した経験がある方であれば、リストはPython3版の「配列」のようなものだと考えていただければ分かりやすいと思います。

リストはプログラミングをする上で多用されるものですのでしっかり学習しましょう!

REPL(またはIDLE)を使ってリストに慣れよう

REPLかIDLEを立ち上げて、リストの基本文法に慣れていきましょう。

可能な限り、下記の緑色の部分をREPLやIDLEに実際に入力してみて下さい。

例えば、定食屋さんのメニューを1つの変数で扱いたい場合、下記のように書きます。

menu_list = [‘日替わり定食’, ‘焼き魚定食’, ‘ステーキ丼’]

また例えば、今週の気温のリストを作るとすれば以下のように書きます。

weeks_temperature = [17, 15, 18, 12, 20, 17, 10]

そしてリスト内の1つ1つのデータのことを要素と呼びます。

要素には番地がついていて、番地は0番目から始まります。この番地のことをインデックスと呼びます。

例えば、今週の気温リスト(weeks_temperature)の最初の要素(17)にアクセスするには下記のように書きます。

weeks_temperature[0]

また、定食屋さんのメニューリスト(menu_list)の最初の要素(’日替わり定食’)にアクセスするには以下のように書きます。

menu_list[0]

そして、例えばmenu_list[1]と書くと2番目の要素を表すので、‘焼き魚定食’を意味します。

リストに値を追加/削除する方法

なんとなくリストの使い方が分かってきたでしょうか?最初の要素のインデックス番号が0から始まる点が少し気持ち悪いかもしれませんが、プログラミングの世界では最初が0番目というのは非常によくあることなのです。

さて、一度作ったリストに値を追加したり、逆に削除したくなるケースも多いものです。

REPLまたはIDLEを使って下記のように練習用のリストtestを作成してみて下さい。

test = [10, 20, 30]

この練習用リストtestに40を追加するには、下記のようにします。

test.append(40)

実際に要素が追加されているかどうかを確認するにはtestと入力しEnterを押します。すると、
[10, 20, 30, 40]と表示され、正しく値が追加できていることが分かりますね。

逆に要素を削除するには、del リスト変数[インデックス番号]という書式を用います。

先ほど追加した40のインデックス番号は0から数えて3番目なので、

del test[3]

と書くことで削除できます。

試しにtestと入力してみると、[10, 20, 30]という結果が返ってきますよね。

 

尚、リストの要素数を求めたいときはlen()関数を利用します。

例えば、test = [10, 20, 30]のときlen(test)と書くと3が返ってきます。

 

リストの結合とスライス

リスト同士を結合したり、リストの一部を取り出す(スライスする)こともできます。

2つのリストを結合するには+演算子を用いて下記のようにします。

【サンプルプログラム12-1】

リストaとリストbを定義し、変数cにaとbを結合したリストを代入しています。

<実行結果>

[1, 2, 3, 4, 5, 6]

さて、リストの一部を取り出すことを「スライス」と呼びます。リストをスライスするには下記の書式を用います。

リスト[開始 : 終了]

少しややこしいのですが、例えばa = [1, 2, 3, 4, 5]というリストがあるとき、a[0 : 2]と書くと、直観的には0番目~2番目、すなわち[1, 2, 3]を取り出すことになるような気がしますが、実際には、0番目~1番目、つまり[1, 2]を取り出すことになります。

従って、例えば、0番目~2番目すなわち[1, 2, 3]を取り出すにはa[0 : 3]と書く必要があります。

ではa = [1, 2, 3, 4, 5]から[2, 3]を取り出すにはどうすればいいでしょうか。2は1番目なので開始は1ですよね。一方、3は2番目なので、+1して終了には3を指定する必要があります。従って、
a[1 : 3]と書けば[1, 2, 3, 4, 5]から[2, 3]を取り出すことができますね。

では練習として下記のサンプルプログラムを実行してみましょう。

【サンプルプログラム12-2】

<実行結果>

b
[‘b’, ‘c’]
[‘d’, ‘e’]

インデックス番号の指定方法が0から始まったり、末尾に+1したりと多少ややこしいですが、こういうものは慣れなので、手を動かして覚えていきましょう。

ここまででリストに関する基本中の基本はおおかた理解できたと思います。

for文とリスト

さて、リストを扱う際は、前回解説したfor文とセットで扱う場合が非常に多いので、for文を利用してリストの各要素を扱う方法を学びましょう。

for文の書式の復習から入りたいと思います。

【for文の書式】

for ループ変数 in 範囲:
        繰り返す処理

前回for文を利用した際は「範囲」にrange()関数を用いて以下のように書きましたね。

【サンプルプログラム12-3】

<実行結果>

0
1
2

range()関数に3を指定するとループ変数は0からはじまり1ずつ増加し、0,1,2と3周ループする仕組みでしたね。

実はこの「範囲」にはrange()関数だけではなくリスト変数も指定することができるのです。すると[リストの要素数]回ループさせることができます。そしてループ変数の値はリストの各要素になります。

理解を助けるために下記のサンプルプログラムを見てみて下さい。

【サンプルプログラム12-4】

<実行結果>

a
b
c

リスト変数testの要素数は3個なので、3周ループします。そしてループ変数iにはtestの各要素が順番にセットされているのが分かりますね。

以上の知識を利用して、あるレストランの客単価のうち1000円以上の客単価の合計値を求めるサンプルプログラム書いてみましょう。

ちょっと少なすぎてレストランの経営が心配になりますが、ある日、某レストランに5組のお客さんが来店し、それぞれの客単価は、[790, 2980, 1500, 900, 3700]であったとしましょう。

※尚、プログラム中のコメントは必ずしも写し取る必要はありません。

【サンプルプログラム12-5】

<実行結果>

8180円

なんとなくプログラムらしいプログラムになってきましたね。

一行ずつ確認していきましょう。

per_customer_price = [790, 2980, 1500, 900, 3700]

まずはある日のレストランの客単価の一覧をリストで表現します。

total_amount = 0

変数total_amountは1000円以上の客単価の合計を管理する変数です。for文を実行する前に0で初期化しておきます。

for price in per_customer_price:

ループ変数priceは790⇒2980⇒1500⇒900⇒3700と1周ごとに変化していきます。per_customer_priceの要素数は5個ですので、5回ループします。

if(price >= 1000):

priceの値が1000円以上の場合のみ、その金額をtotal_amountに加算していきます。逆に言えば、790円のときと900円のときは無視します。

print(str(total_amount) + “円”)

最後にtotal_amountをstr型に変換し、”円”と結合させ、画面に出力します。int型であるtotal_amountとstr型の値である”円”をそのまま結合しようとすると型の不一致でエラーになってしまうので注意しましょう!

次の講座へ進む>鋭意制作中です!

前の講座を復習する>Python3入門|初心者対象!【第3回】for文・while文(制御構文②)

あわせて読みたい