はじめに
やあ、こんにちは。今日はリストについて学ぼう!
はい!よろしくお願いします!
これまで変数には一つの値を入れることができたが、リストを使うと複数の値をまとめて扱うことができるようになるのだ!リストを使いこなせるようになることがプログラムを書く上での一つの鬼門と言っていいだろう。高度なプログラムでは、リストが使われていないものは皆無と言っていいくらい重要なものなのだ!
いまいちイメージが湧きませんが、大切だということは解りました。
まあ、そうだろう。まずは具体例を見せるから一緒に書いていこう!
ビットアローの準備はもういいな?
はい!準備オーケーです。きょうは『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関数で表示している。便利な関数があるのですね!
うむ。さて、リストについての簡単な部分はここまでにしよう。リストについての応用編は次回にゆずるとして、今回は最後に練習問題をやって終わりにしよう。
練習問題(リスト)
問題
新しくfile17、file18を作成し、それぞれに解答しよう
(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に代入して上書きするという方法を取りました。結果、しっかり最小値が表示されました!
全く文句なしだ!素晴らしいの一言だ!
解答するのに時間がかかったということは、知識も増えてきて自分であれこれ考えられるようになってきたということだぞ!力がついてきた証拠だ!
はい!ありがとうございます!
今回はここまでにしよう。次回はリストの応用編だ!結構難しいから、今日の内容をしっかり復習してきてくれ。では、今日もお疲れさん。
はい!しっかり復習してきます。
今日もありがとうございました!
コメント