レジは一瞬で値段を出す
コンビニのレジで、バーコードを読むとすぐに値段が出ます。お店には3,000種類もの商品があります。
もし商品の一覧を上から一つずつ見ていたら、レジに長い列ができます。
実際は、商品コードから値段を一回で引いています。その仕組みを見ていきます。
このレッスンのゴール
メモ
キーを使って、値を引くことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 辞書 | キーと値を組にして持つ入れ物です。 | {"4901001": 150} |
| キー | 値を探すための名前や番号です。 | |
| 値 | キーに結びついたデータです。 | |
| 集合 | 同じものを二つ持たない入れ物です。 | set(visits) |
| 重複 | 同じものが二つ以上あることです。 |
学生が入力するセルは、このプレビューでは空白です。
辞書はキーで値を引く
辞書は、{キー: 値} の組を並べて書きます。
値を読むときは、prices["4901001"] のようにキーを書きます。インデックスの代わりに、キーを使うイメージです。
in を使うと、そのキーが登録されているかを調べられます。
やってみよう: 商品コードで引く
# コンビニのレジです。商品コードから値段(円)を引きます。
prices = {
"4901001": 150, # おにぎり 鮭
"4901002": 130, # 緑茶 500ml
"4901003": 498, # 幕の内弁当
}
code = "4901003"
print("値段:", prices[code], "円")
# 新しい商品を登録します。キーに値を入れるだけです。
prices["4901004"] = 220
# 値上げ: 同じキーに入れると、値が上書きされます。
prices["4901002"] = 140
if "4901009" in prices:
print("登録あり")
else:
print("未登録の商品です")
# "4901001" の値段を160円に変えて、もう一度表示しましょう。
よくある間違い
注意
「同じキーで二回登録すると、値が二つ保存される」と考える人がいます。辞書では、一つのキーに値は一つだけです。二回目に入れた値が、前の値を上書きします。
なぜ辞書は速いのか
リストで探すときは、先頭から一つずつ比べます。商品が多いほど時間がかかります。
辞書は、キーから保存場所を計算します。だから、商品が3,000個でも30万個でも、ほぼ一回で見つかります。
たくさんのデータから一つを探す仕事では、辞書がよく使われます。
例: 一つの商品を探す手間
| 商品の数 | リストで探す(最大) | 辞書で探す |
|---|---|---|
| 10 | 10回比べる | ほぼ1回 |
| 3,000 | 3,000回比べる | ほぼ1回 |
| 300,000 | 300,000回比べる | ほぼ1回 |
学生が入力するセルは、このプレビューでは空白です。
集合は重複を持たない
集合は、同じものを一つしか持ちません。リストを set() に入れると、重複が消えます。
集合も辞書と同じく、in で調べるのが速いです。
「何人来たか」「この番号は登録済みか」を知りたいときに便利です。
やってみよう: 来店した会員
# 今日、店に来たポイント会員の番号です。同じ人が何回か来ています。
visits = ["M-102", "M-305", "M-102", "M-777", "M-305", "M-102"]
members = set(visits) # 集合にすると、重複が消えます
print("来店の回数:", len(visits))
print("来店した人数:", len(members))
# in で、ある会員が来たかどうかをすぐに調べられます。
print("M-777 は来た:", "M-777" in members)
# visits に "M-500" を足して、人数が変わるか確かめましょう。