12. 標準ライブラリ2(もっと多くの道具)
数学、統計、テキスト、リスト、エンコード、ハッシュの道具をもっと知りましょう。
この章で学ぶこと
- 数学、統計、テキスト、リストの道具箱の便利な道具
- 関数を渡して使うリストの道具(
〈変換〉、〈絞り込み〉…)- エンコード、ハッシュ、CSV
11章で道具の持ってき方を覚えたら、今度はよく使われる道具をもっと見て回りましょう。どれもファイルやネットワークを使わない道具なので、このドキュメントの中ですぐに実行できます。
この章は参考書のように読んでもかまいません。 最初から全部覚える必要はありません。下の表で名前をざっと眺めておき、「こんな道具があったな」と思ったときに戻ってきて探して使えば大丈夫です。はじめてなら、数学、統計、テキスト、リストまで読めば十分です。
| モジュール | できること | 道具 |
|---|---|---|
【数学】 |
計算を追加 | 〈平方根〉 〈べき乗〉 〈絶対値〉 〈四捨五入〉 〈サイン〉 〈コサイン〉 〈タンジェント〉 〈対数〉 〈円周率〉 〈最大公約数〉 〈階乗〉 |
【統計】 |
数字のリストを要約 | 〈合計〉 〈最小値〉 〈最大値〉 〈平均〉 〈中央値〉 〈標準偏差〉 |
【テキスト】 |
文字列を扱う | 〈大文字〉 〈小文字〉 〈トリム〉 〈左埋め〉 〈右埋め〉 〈繰り返し〉 〈逆さ〉 〈始まるか〉 〈終わるか〉 〈連結〉 〈数える〉 〈位置〉 |
【リスト】 |
リストを扱う | 〈並べ替え〉 〈反転〉 〈重複除去〉 〈範囲〉 〈平坦化〉 〈小分け〉 〈ペア〉 〈変換〉 〈絞り込み〉 〈畳み込み〉 〈探す〉 〈どれか〉 〈すべて〉 〈基準並べ替え〉 |
【エンコード】 |
文字列を別の形に | 〈Base64エンコード〉 〈Base64デコード〉 〈URLエンコード〉 〈URLデコード〉 |
【ハッシュ】 |
文字列の指紋 | 〈SHA256〉 |
【CSV】 |
表の文字列を読み書き | 〈パース〉 〈文字列化〉 |
【乱数】 |
(11章に加えて)固有番号 | 〈UUID〉 |
数学
〈平方根〉、〈べき乗〉(底, 指数)、〈絶対値〉は名前のとおりです。〈四捨五入〉(数, 桁数)は0.5を切り上げる方式(2.5は3、-2.5は-3)で、桁数は省略できます。〈対数〉(数)は自然対数、〈対数〉(数, 底)は底を決めた対数です。三角関数はラジアンを使います。〈最大公約数〉と〈階乗〉(0から170まで)は整数だけを受け取ります。計算できない値(負の数の平方根、0の対数、大きすぎてあふれる結果)はエラーになります。三角関数や対数などの計算は、エンジンによって最後の桁が違うことがあります。
【数学】から〈平方根〉を持ってこよう
【数学】から〈べき乗〉を持ってこよう
【数学】から〈四捨五入〉を持ってこよう
【数学】から〈最大公約数〉を持ってこよう
【数学】から〈階乗〉を持ってこよう
〈平方根〉(2)を出力しよう
〈べき乗〉(2, 10)を出力しよう
〈四捨五入〉(1234.5678, 2)を出力しよう
〈最大公約数〉(12, 18)を出力しよう
〈階乗〉(10)を出力しよう
統計
数字だけが入ったリストを受け取ります。〈標準偏差〉はPythonのstatistics.stdevと同じ標本標準偏差(n-1で割る)なので、値が2つ以上必要です。値が足りないリスト(空のリストの平均など)はエラーになります。
【統計】から〈平均〉を持ってこよう
【統計】から〈中央値〉を持ってこよう
【統計】から〈最大値〉を持ってこよう
【統計】から〈標準偏差〉を持ってこよう
『点数』を【70, 85, 92, 60, 88】にしよう
枠「平均{〈平均〉(『点数』)}、中央値{〈中央値〉(『点数』)}、最高{〈最大値〉(『点数』)}」を出力しよう
〈標準偏差〉(『点数』)を出力しよう
テキスト
文字数と位置はすべて文字単位(ひらがな1文字が1つ)で数えます。〈トリム〉は前後の空白と改行、全角スペースまで取り除きます。〈左埋め〉(文字列, 幅, 埋める文字)は、文字列が幅より短いときだけ埋め、切り取りはしません。〈位置〉は最初に出てきた場所を1から数えて教え、なければ空っぽです。大文字小文字の変換は、英語のような一般的な文字が対象です。
【テキスト】から〈大文字〉を持ってこよう
【テキスト】から〈トリム〉を持ってこよう
【テキスト】から〈左埋め〉を持ってこよう
【テキスト】から〈連結〉を持ってこよう
【テキスト】から〈位置〉を持ってこよう
【テキスト】から〈数える〉を持ってこよう
〈大文字〉(「hello カナデ」)を出力しよう
枠「[{〈トリム〉(「 余白 」)}]」を出力しよう
〈左埋め〉(「7」, 3, 「0」)を出力しよう
〈連結〉(【「りんご」, 「みかん」, 「ぶどう」】, 「、」)を出力しよう
〈位置〉(「あいうえ」, 「う」)を出力しよう
〈数える〉(「banana」, 「an」)を出力しよう
リスト
〈並べ替え〉は数字同士または文字列同士だけを並べ替え、並べ替えた新しいリストを返します(元のリストはそのままです)。〈範囲〉(始め, 終わり)は終わりまでを含めて整数のリストを作り、始めが終わりより大きければ自動で逆順に数えます。3つ目の値は間隔です。〈重複除去〉は最初に出てきたものだけを残し、〈平坦化〉はリストの中のリストを1段階だけ開きます。
【リスト】から〈並べ替え〉を持ってこよう
【リスト】から〈範囲〉を持ってこよう
【リスト】から〈重複除去〉を持ってこよう
【リスト】から〈小分け〉を持ってこよう
【リスト】から〈ペア〉を持ってこよう
〈並べ替え〉(【3, 1, 2】)を出力しよう
〈範囲〉(1, 5)を出力しよう
〈範囲〉(10, 0, (0 - 5))を出力しよう
〈重複除去〉(【1, 2, 1, 3, 2】)を出力しよう
〈小分け〉(【1, 2, 3, 4, 5】, 2)を出力しよう
〈ペア〉(【「あ」, 「い」】, 【1, 2】)を出力しよう
関数を受け取るリストの道具
リストの項目ごとに自分で作った関数を適用する道具です。カナデには名前のない関数がないので、名前を付けて作った関数を〈名前〉で渡します(関数は項目を1つ受け取る形です)。
| 道具 | できること |
|---|---|
〈変換〉(リスト, 〈関数〉) |
項目ごとに関数を適用した結果の新しいリストです |
〈絞り込み〉(リスト, 〈関数〉) |
関数が真を返した項目だけを残した新しいリストです |
〈畳み込み〉(リスト, 〈関数〉, 初期値) |
関数(ここまでの値, 項目)を順に適用して1つの値にまとめます |
〈探す〉(リスト, 〈関数〉) |
関数が真を返した最初の項目です(なければ空っぽ) |
〈どれか〉(リスト, 〈関数〉) |
1つでも真なら真です(空のリストは偽) |
〈すべて〉(リスト, 〈関数〉) |
すべて真なら真です(空のリストは真) |
〈基準並べ替え〉(リスト, 〈関数〉) |
関数が返した値(数字同士または文字列同士)が小さい順に並べ替えた新しいリストです(同じなら元の順序を保ちます) |
〈絞り込み〉、〈探す〉、〈どれか〉、〈すべて〉に渡す関数は、真か偽を返す必要があります。ほかの値を返すとエラーになります。
【リスト】から〈変換〉と〈絞り込み〉と〈畳み込み〉を持ってこよう
【リスト】から〈探す〉と〈基準並べ替え〉を持ってこよう
〈二倍〉を作ろう(『x』):
(『x』 * 2)を返そう
〈偶数〉を作ろう(『x』):
もし(『x』 % 2 == 0)なら:
真を返そう
偽を返そう
〈足す〉を作ろう(『合計』, 『x』):
(『合計』 + 『x』)を返そう
〈文字数〉を作ろう(『文』):
『文』の『長さ』を返そう
〈変換〉(【1, 2, 3】, 〈二倍〉)を出力しよう
〈絞り込み〉(【1, 2, 3, 4】, 〈偶数〉)を出力しよう
〈畳み込み〉(【1, 2, 3, 4】, 〈足す〉, 0)を出力しよう
〈探す〉(【1, 3, 4, 6】, 〈偶数〉)を出力しよう
〈基準並べ替え〉(【「ひらがなだよ」, 「木」, 「山川」】, 〈文字数〉)を出力しよう
エンコードとハッシュ
文字列はUTF-8として扱います。〈Base64エンコード〉と〈Base64デコード〉はbase64、〈URLエンコード〉と〈URLデコード〉はアドレスバーに入れられるよう%E3%81%82のように変えます(英数字と- _ . ~以外はすべて変換します)。形式が間違った文字列を読み取るとエラーになります。〈SHA256〉は文字列のSHA-256の値を16進数64桁で返します。
【エンコード】から〈Base64エンコード〉を持ってこよう
【エンコード】から〈Base64デコード〉を持ってこよう
【エンコード】から〈URLエンコード〉を持ってこよう
【ハッシュ】から〈SHA256〉を持ってこよう
【乱数】から〈UUID〉を持ってこよう
〈Base64エンコード〉(「日本」)を出力しよう
〈Base64デコード〉(「5pel5pys」)を出力しよう
〈URLエンコード〉(「あ い」)を出力しよう
〈SHA256〉(「abc」)を出力しよう
〈UUID〉()を出力しよう
〈UUID〉()は実行するたびに違うランダムなUUID(3b241101-e2bb-4255-8caf-4136c566a962のような文字列)を作ります。
CSV
【CSV】は、カンマで区切った表の文字列(CSV)を読み書きします。〈パース〉(文字列)は文字列を行のリストに変えます。行はセルの文字列のリストです。セルはいつも文字列なので、数字が必要なら〈数字に〉で変えて使ってください。セルの中にカンマや改行があるときは"で囲み、引用符そのものは""と書きます。2つ目の値で区切り文字を1文字で渡すこともできます(「;」など)。
【CSV】から〈パース〉を持ってこよう
『表』を【リスト】の〈パース〉(「名前,点数」)にしよう
『表』を出力しよう
〈文字列化〉(行のリスト)は反対に、行のリストを文字列にします。引用符は必要なセルにだけ付け、セルには文字列、数字、空っぽ(空のセル)だけを入れられます。行と行の間は改行で、最後の行の後ろには付きません。
【CSV】から〈文字列化〉を持ってこよう
〈文字列化〉(【【「名前」, 「メモ」】, 【「太郎」, 空っぽ】】)を出力しよう
〈文字列化〉(【【「あ」, 「い」】】, 「;」)を出力しよう
【JSON】にも〈パース〉と〈文字列化〉があるので、両方を使うときは別名を付けてください。閉じていない引用符のように形式が正しくない文字列はエラーになります。
【CSV】から〈パース〉を持ってこよう
〈パース〉(「"閉じていません」)を出力しよう
練習問題
1. 点数のリストの平均、いちばん高い点数、いちばん低い点数を出力してみましょう。(8章では繰り返し文で自分で求めましたが、【統計】を使えば1行です。)
『点数たち』を【72, 95, 88, 61, 90】にしよう
答えの例
【統計】から〈平均〉と〈最大値〉と〈最小値〉を持ってこよう
『点数たち』を【72, 95, 88, 61, 90】にしよう
枠「平均{〈平均〉(『点数たち』)}、最高{〈最大値〉(『点数たち』)}、最低{〈最小値〉(『点数たち』)}」を出力しよう
2. 名前のリストを、あいうえお順に並べ替えて出力してみましょう。
答えの例
【リスト】から〈並べ替え〉を持ってこよう
『名前たち』を【「そら」, 「あおい」, 「はな」】にしよう
(〈並べ替え〉(『名前たち』))を出力しよう
3. 文字を逆さにして、前から読んでも後ろから読んでも同じ言葉(例:「しんぶんし」)かどうかを確かめてみましょう。
答えの例
【テキスト】から〈逆さ〉を持ってこよう
『言葉』を「しんぶんし」にしよう
もし(『言葉』が〈逆さ〉(『言葉』)と同じだ)なら:
「前から読んでも後ろから読んでも同じです!」を出力しよう
それ以外なら:
「前と後ろで違います。」を出力しよう
次の章では、ファイルのパスを扱う【パス】の道具箱を見ます。