スライス
50 件を全部並べても読めない
記録が増えると、一覧に全部出しても目が滑るだけです。見たいのはたいてい最近の数件で、リストの一部だけがほしくなります。
まず 1 件だけ取り出す書き方です。リストは先頭を 0 として番号が振られています。この番号を インデックス と呼びます。
Python
items = ["りんご", "みかん", "ノート", "電車代"]
print(items[0])
print(items[2])りんご と ノート が出ます。1 つ目が 0 番であることに注意します。
範囲でほしいときは items[開始:終了] と書きます。取れるのは開始の位置から、終了の手前まで です。終了の位置そのものは入りません。
Python
print(items[1:3])['みかん', 'ノート'] になります。1 番と 2 番の 2 件です。この書き方を スライス と呼びます。取れた件数が 1 つ足りない、多いと感じたら、まずここを疑います。
開始を省くと先頭から、終了を省くと末尾までになります。items[:2] は最初の 2 件、items[2:] は 3 件目以降です。
うしろから数えたい
「最後の 1 件」を取りたいのに、そのつど件数を数えるのは面倒です。インデックスにはマイナスが使えて、-1 がいちばんうしろ、-2 がその 1 つ前を指します。
Python
print(items[-1])電車代 が出ます。マイナスの番号はスライスの開始位置にも書けるので、「うしろから数えた位置から最後まで」という切り出し方ができます。
コロンの有無で戻り値の型が変わることも押さえておきます。items[-1] は中身が 1 つ返り、コロンを足すとリストが返ります。
件数が足りないと落ちる、が起きない
スライスの気持ちよさは、はみ出しても止まらないことです。
Python
short = ["りんご"]
print(short[0:5])
print(short[3:])['りんご'] と [] が出ます。short[5] のように 1 件だけを無い番号で読むと IndexError で止まりますが、スライスは範囲がはみ出しても静かに、あるだけを返します。おかげで「件数が足りないときは」という場合分けを書かずに済みます。
もう 1 つ、スライスは 新しいリスト を作って返します。元のリストは増えも減りもしません。前回の append や remove が元を書き換えたのとは正反対です。
やってみよう
関数 recent_three(records) を実装してください。records は支出の辞書が並んだリストです。末尾の 3 件を取り出して return します。
3 件に満たないときは、あるだけ全部を返します。空リストのときは空リスト [] です。件数で場合分けをせず、スライスだけで書いてください。並べ替えはせず、元の順番のままにします。
要件
- 関数名は recent_three で、引数は records の1つ
- リストの末尾3件をスライスで取り出して return する
- 3件に満たないときはあるだけ全部を返し、エラーにしない
- 元のリストの順番を保ち、並べ替えない