プログラミング入門II
2026.01.19
タプル,辞書,集合
授業の最初に2次元リストに関する確認テストを実施しますので,準備をしっかりしておいてください.
今回もエラーもなく大体できていました.最後まで気を緩めずにこの調子でやっていきましょう.
for i in range(3):
print('|',end='')
for j in range(3):
print(f'{lst[i][j]:3} ', end = '')
print('|',end='')
if i == 1:
print(' + ',end='')
else:
print(' ',end='')
print('|',end='')
for k in range(3):
print(f'{lst2[i][k]:3} ', end = '')
print('|',end='')
if i == 1:
print(' = ',end='')
else:
print(' ',end='')
print('|',end='')
for m in range(3):
print(f'{lst[i][m] + lst2[i][m]:3}', end='')
print(" |")
さて,上の例ですが,全回も紹介したように内側の for 文のインデックスの変数ですが,それぞれの for 文で初期化されるので,変数名を変える必要はありません.
a = [None] * height
for i in range(height):
a[i] = [None] * width
for j in range(width):
a[i][j] = random.randint(1, 20)
b = [None] * height
for i in range(height):
b[i] = [None] * width
for j in range(width):
b[i][j] = random.randint(1, 20)
c = [None] * height
for i in range(height):
c[i] = [None] * width
for j in range(width):
c[i][j] = a[i][j] + b[i][j]
|
上の例はダメですね.問題には3行3列の行列を作ると指定しているので,題意を満たしていません.
リストを使った実用的な処理を前回は考えました.インデックスの使い方は最初は混乱しがちですが,実際に自分で何か処理を考えるときはたいてい厄介な処理に取り組むことになりますので,その辺り慣れておくことも必要じゃないでしょうか.
今回扱うのは,タプル,辞書,集合というリストとはまた異るオブジェクトです.新しい言語では,だいたい似たようなものが用意されています.何故かというと,データを扱う際に便利になるからで,Python は諸般の事情によりデータ処理の目的で使用されることが多くなっていますので,扱うデータの種類によってそれぞれ便利なものが準備されています.それらを順に見ていきましょう.
まずタプルですが,数学では「複数の構成要素からなる組を総称する一般的な概念」と Wikipedia には書いてあります.では,リストと同じようなものかというと,見かけはほぼ同じですが,大きな違いが教科書にも書かれている「タプルは要素の変更ができない」ということです.別の言い方をすると,要素を変更する必要の無い場合には,リストよりタプルを使うべきということです.間違って中身を変えてしまったりする危険性がなくなります.
たとえば,前々回使用したじゃんけんやトランプなどで特定の文字列をリストで用意することで,if 文を使用しなくても種々の操作ができましたが,中身を変更することが無いので,実はタプルとして用意する方が適切です.今後は,変更の必要がなければタプルで準備することになります.
辞書とは,教科書にもあるように数値としてのインデックスではなく名前でアクセスしたい場合に使用するオブジェクトです.リストやタプルは for 文などの反復処理と組み合わせてインデックスを利用して要素にアクセスするものですが,辞書は使い方が違います.おそらくこの授業で役に立つようなプログラムは作らないと思いますが,実際にユーザが画面を操作するようなものを作るのであれば,重要になります.他の言語でも「ハッシュ」などとして用意されています.
例えば,中国地方の都道府県を選択してそれに関連した値を参照したいとき,リストなどでは番号を振って,数字で関連付けさせますが,辞書を使うとそのような数字に変換することなく,名前のままで紐づけできますので,ボタンのラベルなどと合わせると直感的に関連付けができたりします.
リストやタプルでは要素の値に同じものがあっても構いません.ただ,事情によっては重複を避けたい場合もあります.そこで用意されているのがこの「集合」で,リストから重複を無くすような処理に使ったりできます.
今回の演習問題です.
いつものようにMoodleを利用します.明日20日の10:00から閲覧可能で,締切りは今回は特別に試験後の30日(金)の13:00です.
いつものように宿題へのコメントは行います.このWebで専用のページを作りますので,気になる人は確認してください.