map

このレッスンでできるようになること。map を使って、支出リストの全要素を同じルールで別の値へ変換できるようになります。

map(関数, リスト) は、リストの要素を1つずつ関数に渡し、その戻り値を順に取り出せるものを返します。前のレッスンで見たとおり、渡すのは関数オブジェクトなのでカッコは付けません。

amounts = [220, 640, 1280] print(list(map(str, amounts))) # ['220', '640', '1280']

ここで大事なのは list() です。map が返すのは map オブジェクトという「これから順に作る」入れ物で、そのまま print すると map object at 0x... のような素っ気ない表示になります。結果をリストとして扱いたいときは必ず list() に通してください。しかも map オブジェクトは一度使い切ると空になるため、二度目のループでは何も出てきません。早めに list へ固めるのが安全です。

短い変換なら、その場で名前の無い関数を書ける lambda が便利です。lambda 引数: 式 と書くと、式の値を返す関数オブジェクトになります。

amounts = [220, 640, 1280] taxed = list(map(lambda a: a * 110 // 100, amounts)) print(taxed) # [242, 704, 1408]

税込金額は a * 1.1 でも計算できますが、そうすると 242.00000000000003 のような値が出ることがあります。家計簿の金額は円単位の整数で持ちたいので、110 を掛けてから 100 で整数除算する a * 110 // 100 の形にします。金額は int のまま扱う、と決めておくと表示も比較も揺れません。

要件

  1. map と lambda を使って変換する
  2. 税込金額は amount * 110 // 100 で計算し、int のまま返す
  3. map オブジェクトではなく list を返す

入出力例

tax_included_amounts([{"amount":220,"name":"牛乳"},{"amount":640,"name":"電車代"}])[242,704] tax_included_amounts([{"amount":1280,"name":"コーヒー豆"},{"amount":165,"name":"ノート"},{"amount":2035,"name":"書籍"}])[1408,181,2238]

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
学習モード

メモ

map

⌘S で保存