5. リストと辞書でデータを整理
前回は繰り返し処理について学びました。今回は、データを整理して扱うための「リスト」と「辞書」について学んでいきましょう。
5.1 リストとは?複数の値を順番に管理する方法
リストは、複数のデータを順番に並べて保存できる機能です:
リストの作り方
# リストの作り方
fruits = ["りんご", "バナナ", "オレンジ"]
numbers = [1, 2, 3, 4, 5]
mix = ["太郎", 15, "東京", 172.5] # 異なる型も入れられる
# インデックス(添え字)で要素を取り出す
print(fruits[0]) # りんご(最初の要素)
print(fruits[-1]) # オレンジ(最後の要素)
print(fruits[1:3]) # ['バナナ', 'オレンジ'](範囲指定)
# リストの長さを調べる
print(len(fruits)) # 3
リストのポイント
- 要素には0から始まる番号(インデックス)が付く
- 異なる型のデータを混ぜて入れられる
- 順番が重要な場合に便利
5.2 リストへの要素追加・削除・取り出し
リストは後から内容を変更できます:
リストへの追加
# リストへの追加
foods = ["カレー", "ラーメン"]
foods.append("寿司") # 末尾に追加
foods.insert(1, "うどん") # 指定位置に追加
# リストからの削除
foods.remove("ラーメン") # 指定要素を削除
del foods[0] # インデックスを指定して削除
last_food = foods.pop() # 最後の要素を取り出して削除
# リストの操作
numbers = [3, 1, 4, 1, 5]
numbers.sort() # 並び替え(昇順)
numbers.reverse() # 順序を反転
numbers.count(1) # 値の出現回数を数える
5.3 辞書とは?「言葉(キー)」と「意味(値)」で管理
辞書は、データをキーと値のペアで管理します:
辞書の作り方
# 辞書の作り方
student = {
"name": "山田太郎",
"age": 16,
"grade": 2,
"class": "A"
}
# 値の取り出し
print(student["name"]) # 山田太郎
print(student.get("age")) # 16(安全な取り出し方)
# キーの一覧を取得
print(student.keys()) # キーの一覧
print(student.values()) # 値の一覧
5.4 辞書への要素追加・更新・削除
辞書も後から内容を変更できます:
辞書への追加
# 要素の追加と更新
scores = {"数学": 85}
scores["英語"] = 92 # 新しい要素を追加
scores["数学"] = 88 # 既存の要素を更新
# 要素の削除
del scores["英語"] # キーを指定して削除
scores.clear() # すべての要素を削除
# 安全な取り出し方
math_score = scores.get("数学", 0) # キーがない場合は0を返す
5.5 リストと辞書を上手に使い分けよう
状況に応じて適切なデータ構造を選びましょう:
リストが適しているケース
# リストが適しているケース
# - 順番が重要な場合
favorite_games = ["マリオ", "ポケモン", "スプラトゥーン"]
# - 同じ種類のデータをまとめる場合
test_scores = [85, 92, 78, 90, 88]
# 辞書が適しているケース
# - データに名前を付けて管理する場合
person = {
"name": "鈴木花子",
"age": 16,
"hobby": "バスケ"
}
# - キーと値の対応が重要な場合
capital = {
"日本": "東京",
"アメリカ": "ワシントンD.C.",
"イギリス": "ロンドン"
}
5.6 リスト内包表記でスマートにリストを作る
リスト内包表記を使うと、簡潔にリストを作れます:
リスト内包表記の例
# 1から10までの二乗のリスト
squares = [x**2 for x in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 偶数だけのリスト
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
# 文字列のリスト変換
word = "Python"
chars = [c.upper() for c in word]
print(chars) # ['P', 'Y', 'T', 'H', 'O', 'N']
5.7 リストと辞書を組み合わせて複雑なデータを扱う
実践的なプログラムでは、リストと辞書を組み合わせることが多いです:
生徒の成績データ
# 生徒の成績データ
students = [
{
"name": "山田太郎",
"scores": {"数学": 85, "英語": 92, "国語": 88}
},
{
"name": "鈴木花子",
"scores": {"数学": 92, "英語": 88, "国語": 90}
}
]
# データの活用例
for student in students:
print(f"\n{student['name']}の成績:")
for subject, score in student['scores'].items():
print(f"{subject}: {score}点")
課題 1. クラス名簿(名前・点数)を辞書で管理して平均点を求めるプログラム
クラスの成績管理プログラム
# クラスの成績管理プログラム
class_scores = {
"山田太郎": 85,
"鈴木花子": 92,
"佐藤次郎": 78,
"田中美咲": 95,
"高橋健一": 88
}
# 平均点を計算
total = sum(class_scores.values())
average = total / len(class_scores)
print(f"クラスの平均点:{average:.1f}")
# 平均点以上の生徒を表示
print("\n平均点以上の生徒:")
for name, score in class_scores.items():
if score >= average:
print(f"{name}: {score}点")
# チャレンジ:
# - 最高点と最低点の生徒を表示してみよう
# - 点数帯(90点以上、80-89点、...)ごとの人数を集計してみよう
# - 複数の科目の点数を管理してみよう
課題 2. 好きな果物リストを作り、最初と最後の要素を表示するプログラム
好きな果物リストを作り、最初と最後の要素を表示するプログラム
# 果物リストを作成
fruits = []
# 果物を追加
while True:
fruit = input("好きな果物を入力してください(終了はquit):")
if fruit == "quit":
break
fruits.append(fruit)
# リストが空でない場合のみ表示
if fruits:
print("\n入力された果物リスト:")
print(fruits)
print(f"最初の果物:{fruits[0]}")
print(f"最後の果物:{fruits[-1]}")
print(f"果物の総数:{len(fruits)}個")
else:
print("果物が入力されませんでした")
# チャレンジ:
# - 果物を五十音順に並び替えてみよう
# - 重複する果物を除外してみよう
# - 果物とその好きな度合い(5段階)も記録してみよう
まとめ
この章で学んだこと:
- リストは順序付きのデータ集合
- 辞書はキーと値のペアでデータを管理
- それぞれの特徴を活かした使い分けが重要
- リスト内包表記で効率的なコード作成
- 実践的なデータ管理の方法
次の章では、関数について学び、コードを再利用可能な形にまとめる方法を身につけます!