第八回 『リスト』について

プログラミング編

はじめに

マサト先生
マサト先生

やあ、こんにちは。今日はリストについて学ぼう!

ヒロト
ヒロト

はい!よろしくお願いします!

マサト先生
マサト先生

これまで変数には一つの値を入れることができたが、リストを使うと複数の値をまとめて扱うことができるようになるのだ!リストを使いこなせるようになることがプログラムを書く上での一つの鬼門と言っていいだろう。高度なプログラムでは、リストが使われていないものは皆無と言っていいくらい重要なものなのだ!

ヒロト
ヒロト

いまいちイメージが湧きませんが、大切だということは解りました。

マサト先生
マサト先生

まあ、そうだろう。まずは具体例を見せるから一緒に書いていこう!

ビットアローの準備はもういいな?

ヒロト
ヒロト

はい!準備オーケーです。きょうは『file15』を作成して書いていきます!

マサト先生
マサト先生

では、まずAというリストを作成しよう。リストを作るときは次のように[ ]を用いるのだ。

マサト先生
マサト先生

リストAの中には1,2,3,4,5という数が入っている状態だ。これらリストに入っている値のことを要素と言い、画面のようにコンマで区切って並べるのだ。リストの中の要素の順番を添え字(インデックス)というが、要素は左から順番に0から数えることに注意する。例えば、A[0]は左から一番目の要素である1を表し、A[2]は左から3番目の要素である3を表すのだ。人間は1から数えることが自然だが、コンピュータは0から数えることが自然なのだ。

ヒロト
ヒロト

確かに順番が一つずれていますね。これは気を付けなくてはいけませんね。

マサト先生
マサト先生

次のようにリスト自体を表示させることもできるぞ。

ヒロト
ヒロト

かっこが付いたままなので見た目もリストだって分かりますね!

リストの要素を表示する

マサト先生
マサト先生

ここで一つ問題だが、リストAの要素をfor文を使ってすべて表示してみてほしい。すでに書いた2個のprint関数は消去していいぞ。

ヒロト
ヒロト

はい、要素は全部で5個あるから、for文の回数は5とすればよいので・・・こうかな?

ヒロト
ヒロト

出来ました!しっかりすべての要素が表示されました!

マサト先生
マサト先生

うむ、for文をしっかり覚えていたようだな!関心関心。

では次に、リストに値を追加してみよう。

リストに値を追加する

マサト先生
マサト先生

まず、新しくfile16を作成してもらおう。

そして、空のリストBを用意しよう。空のリストは『 B=[] 』のように書くぞ。つまり要素が一つも入っていないリストということだ。リストの末尾に要素を追加するには『 (リスト名).append(要素) 』の形で指定する。次の画面を見てほしい。空のリストBに要素1を追加しているぞ。

ヒロト
ヒロト

本当だ。空だったリストBに、1が要素として追加されましたね!

マサト先生
マサト先生

では、ここでまた問題だ。for文ランダム関数を使って、上のリストBに1から10の整数9個をランダムに追加してみてくれ。

ヒロト
ヒロト

はい!ランダム関数を使うときは、import randomを1行目に書かなくてはいけませんでした。なので、これを1行目に書き入れることをまずしなくてはいけませんね!

ヒロト
ヒロト

出来ました!

6行目のfor文で回数を9回にして、7行目ではランダム関数の範囲を1から10にして選んだ整数を変数aに代入しています。そして、8行目でリストBにその選んだ整数を追加しています。

マサト先生
マサト先生

おお!かなり、上達してきたな!for文のインデントを揃えていることも素晴らしいぞ!では、次にリストの要素を分析してみよう。

リストの要素の分析

マサト先生
マサト先生

上で作成したリストBについて考えていくぞ。

リストの要素の最大値を求めるときは、それぞれ『sum関数』、『max関数』を用いるぞ。次の画面を見てほしい。11行目から下に注目してくれ。

ヒロト
ヒロト

11行目で変数 S に B の要素の合計 sum(B) を、14行目で変数 M に B の要素の最大値 max(B) を代入したのですね。そして、それらをprint関数で表示している。便利な関数があるのですね!

マサト先生
マサト先生

うむ。さて、リストについての簡単な部分はここまでにしよう。リストについての応用編は次回にゆずるとして、今回は最後に練習問題をやって終わりにしよう。

練習問題(リスト)

問題

新しくfile17file18を作成し、それぞれに解答しよう

(1)1から100の整数10個をランダムに追加したリスト C を作成し、
  そのリストから偶数だけを表示するプログラムを作ろう。

(2)(1)のリスト C からfor文などを使って(min関数は使わずに)最小の値を
   表示するプログラムを作ろう。

解答

ヒロト
ヒロト

(2)のmin関数を使わずにという問題が難しそうですね!

とりあえず、リスト C を作ってみます。

ヒロト
ヒロト

よし、どうやら良さそうだぞ!

さて、(1)はこのリストC から偶数のみを表示させなければならないな・・・偶数ということは2で割った余りが0ということだから、こうかな!

ヒロト
ヒロト

8行目でfor文の回数を10回にして、9行目でリストC の要素を順番に2で割っていき、余りが0になるものを表示させています。ただ、リストC は実行するごとにランダム関数によって作り変えられるので最初に作ったのとは異なっていますが大丈夫ですよね?

マサト先生
マサト先生

うむ、(1)はそれでいいぞ!ベリーグッドだ!

ヒロト
ヒロト

問題は(2)ですよね、min関数を使わずにリストの最小値を求めるのですよね?さっきから考えているのですが・・・何かヒントくれませんか?

マサト先生
マサト先生

うむ、もちろんmin関数を使えば一発なのだが、とても考えさせられるいい問題だからあえて出したのだ。ヒントはif文も使うぞ!

ヒロト
ヒロト

if文か・・・左の要素から順番に比較していくのはどうだろう?


長い格闘の末・・・


ヒロト
ヒロト

ふう、やっとできたっぽいぞ!

まず、8行目で変数minにリストC の一番目の要素を代入しました。次に9行目でfor文の回数を10回にして、10行目でif文の条件を、最初に代入した要素と、続く番号の要素を順番に比較します。もし比較する要素の値が小さくなれば、それを新たにminに代入して上書きするという方法を取りました。結果、しっかり最小値が表示されました!

マサト先生
マサト先生

全く文句なしだ!素晴らしいの一言だ!

解答するのに時間がかかったということは、知識も増えてきて自分であれこれ考えられるようになってきたということだぞ!力がついてきた証拠だ!

ヒロト
ヒロト

はい!ありがとうございます!

マサト先生
マサト先生

今回はここまでにしよう。次回はリストの応用編だ!結構難しいから、今日の内容をしっかり復習してきてくれ。では、今日もお疲れさん。

ヒロト
ヒロト

はい!しっかり復習してきます。

今日もありがとうございました!

コメント

タイトルとURLをコピーしました