第7回 標準ライブラリ (2)

本題に入る前に必ず連絡の動画を見てください。
Google Colabへのリンク

1. リストを操作するメソッド (つづき)

概要

動画の解説を参照

前回はリストの要素を並べ替えるメソッド sort を紹介しましたが、引数で key を設定すればいろいろな並べ替え方ができます。
文字列のリストを普通にソートすれば辞書順になりますが、key に len (文字列の長さ) を設定すると短い順に並びます。

ラムダ式 (詳しくは第9回あたりに解説します) を使うと、もう少し複雑な key も設定できます。
例えばこれは「1の位」の値が昇順になるようなソートです。

bisectモジュールの insortメソッドを使うと、既存の並びに割り込むように値を挿入できます。
insortメソッドは、リストの要素があらかじめソートされている前提で使います。
ソートせずに insortメソッドを使っても既存の要素は並び替えられないので、要素の並びはおかしくなります。
リストのように順序を持つ型としてタプルがあります。
タプルは ( ) で要素を列挙したものを囲んで定義できます。タプルの要素はリストと同様に [ ] で取得できます。

リストがミュータブル (書き換え可能) なのに対して、タプルはイミュータブル (書き換え不可) です。

課題1

4つの浮動小数点型の要素をもつリスト numbers を作り、小数第1位の値が昇順になるようにソートしてその結果を表示したあと、中間の位置になるように値を割り込ませて結果を表示してください。
※ 要素に以下と同じ値を使わないでください。
(リストの例)

(実行例)

※ リストの要素の値はソートが意味のあるものにしてください。
(NG例 : どれも小数第1位が同じ値)

2. セット型

動画の解説を参照

セット型は「複数の値を束ねる」という点ではリストやタプルと似ていますが、インデックスを持ちません。
つまり、セットの中の要素は平等で、「どちらが前でどちらが後」という関係がないということです。
セットは要素を列挙したものを {} かset([]) で囲んで定義できます。
空っぽのセットは後者の方法でだけ作れます。

セットの要素は重複しません。例えばこのような要素を入れてセット a を作っても、その中の 'A' は1つだけになります。

セットは数学で言う「集合」のようなものです。
以下の方法で和集合、積集合、差集合、対称差集合を得られます。
演算 数学での
書き方
メソッド 演算子
和集合 \(A\cup B\)
a.union(b)
a | b
積集合 \(A\cap B\)
a.intersection(b)
a & b
差集合 \(A-B\)
a.difference(b)
a - b
対称差集合 \(A\Delta B\)
a.symmetric_difference(b)
a ^ b

セットどうしの包含関係は、issubsetメソッド, issupersubsetメソッドで判定できます。

課題2

自分の姓の大文字のローマ字 (pinyin もしくは本名のスペル) からなるセット last_name と、自分の名の大文字のローマ字 (pinyin もしくは本名のスペル) からなるセット first_name を作り、それぞれの和集合・積集合・姓-名の差集合・名-姓の差集合・対称差集合を表示するコードを書いてください。
(セットの例)

(実行例)

3. 辞書型

動画の解説を参照

辞書型も複数の値をまとめたものですが、順序を持ちません。
ただし、セットとは違い、それぞれの要素がキー (ハッシュ) に対応します。
要素は [ ] の中にキーを入れることで取得できます。

辞書の定義にはいろいろな方法があります。

辞書のリストを作ることもできます。

辞書のリストもsortメソッドでソートできます。その場合は引数でキーを指定します。

課題3

名前・身長のキーをもつ辞書型の要素3つからなるリスト data を作り、名前の辞書順・身長の降順にソートした結果を表示するコードを書いてください。
※ 名前はローマ字で頭文字は大文字、それ以外は小文字にしてください。
(リストの例)

(実行例)

提出

今回作成したノートブックを「plang2024a@gmail.com」と共有してください。
※ 課題の再提出の際は、ノートブックの再度の共有はせずにチャットで連絡してください。