データ型とコレクション

Python の組み込みデータ構造

データ型の基本

基本データ型

数値型:

# 整数
age = 25
year = 2024

# 浮動小数点数
height = 175.5
price = 99.99

# 複素数
complex_num = 3 + 4j

文字列型:

# 文字列
name = "田中太郎"
message = 'こんにちは'

# 複数行文字列
poem = """
春の日は
桜が咲いて
美しい
"""

ブール型と None

# ブール型
is_valid = True
is_empty = False

# None 型(値がない状態)
result = None

# 型の確認
print(f"is_valid の型: {type(is_valid)}")
print(f"result の型: {type(result)}")

# 真偽値の評価
print(f"True and False = {True and False}")
print(f"True or False = {True or False}")
print(f"not True = {not True}")

リスト

リストの基本

# リストの作成
fruits = ["りんご", "バナナ", "オレンジ"]
numbers = [1, 2, 3, 4, 5]
mixed = ["テキスト", 42, True, None]

print(f"果物: {fruits}")
print(f"数値: {numbers}")
print(f"混合: {mixed}")

# リストの長さ
print(f"果物の数: {len(fruits)}")

リストの操作

リストは変更可能(ミュータブル)なので、要素を自由に追加・削除・変更できます:

# リストの作成
shopping_list = ["牛乳", "パン", "卵"]

# .append() - 末尾に要素を追加
shopping_list.append("バター")
print(f"追加後: {shopping_list}")

# .insert() - 指定位置に要素を挿入(既存要素は右にシフト)
shopping_list.insert(1, "チーズ")  # インデックス1番目に挿入
print(f"挿入後: {shopping_list}")

# .remove() - 値で要素を削除(最初に見つかったもの)
shopping_list.remove("パン")
print(f"削除後: {shopping_list}")

# インデックスによるアクセス
print(f"最初の項目: {shopping_list[0]}")   # インデックス0は最初
print(f"最後の項目: {shopping_list[-1]}")  # -1は最後から1番目

重要: Pythonのインデックスは0から始まります!

リストスライシング

スライシングはリストの部分を取得する強力な機能です。構文: [開始:終了:ステップ]

# スライシングの例
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(f"全体: {numbers}")
print(f"最初の3つ: {numbers[:3]}")      # 開始を省略=0から、終了=3(含まない)
print(f"最後の3つ: {numbers[-3:]}")     # 開始=-3(後ろから3番目)、終了省略=最後まで
print(f"中間部分: {numbers[3:7]}")      # インデックス3から6まで(7は含まない)
print(f"偶数インデックス: {numbers[::2]}")  # ステップ2で要素を飛ばし取得
print(f"逆順: {numbers[::-1]}")         # ステップ-1で逆順取得

覚え方: - [:n] → 最初からn個 - [n:] → n番目から最後まで - [::2] → 1つおきに取得 - [::-1] → 逆順

辞書

辞書の基本

# 辞書の作成
person = {
    "名前": "田中太郎",
    "年齢": 30,
    "職業": "エンジニア",
    "趣味": ["読書", "映画", "プログラミング"]
}

print(f"人物情報: {person}")
print(f"名前: {person['名前']}")
print(f"年齢: {person['年齢']}")

辞書の操作

# 辞書の操作
student_grades = {"数学": 85, "英語": 92, "理科": 78}

# 新しいキーと値の追加
student_grades["社会"] = 88
print(f"科目追加後: {student_grades}")

# 値の更新
student_grades["数学"] = 90
print(f"更新後: {student_grades}")

# キーの確認
print(f"英語の成績はある? {'英語' in student_grades}")
print(f"音楽の成績はある? {'音楽' in student_grades}")

# すべてのキーと値
print(f"科目: {list(student_grades.keys())}")
print(f"成績: {list(student_grades.values())}")

タプルとセット

タプル(変更不可)

# タプルの作成
coordinates = (10, 20)
rgb_color = (255, 128, 0)
person_info = ("山田花子", 25, "デザイナー")

print(f"座標: {coordinates}")
print(f"RGB色: {rgb_color}")
print(f"人物情報: {person_info}")

# タプルのアンパック
x, y = coordinates
name, age, job = person_info

print(f"X座標: {x}, Y座標: {y}")
print(f"名前: {name}, 年齢: {age}, 職業: {job}")

セット(重複なし)

# セットの作成
unique_numbers = {1, 2, 3, 4, 5}
colors = {"赤", "青", "緑", "赤", "黄"}  # 重複は自動削除

print(f"ユニークな数値: {unique_numbers}")
print(f"色セット: {colors}")

# セット演算
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

print(f"和集合: {set1 | set2}")
print(f"積集合: {set1 & set2}")
print(f"差集合: {set1 - set2}")

実践的な例

データ処理の例

# 学生の成績管理システム
students = [
    {"名前": "田中太郎", "成績": [85, 92, 78, 88]},
    {"名前": "佐藤花子", "成績": [90, 87, 95, 92]},
    {"名前": "鈴木一郎", "成績": [75, 82, 79, 85]}
]

# 各学生の平均点を計算
for student in students:
    name = student["名前"]
    grades = student["成績"]
    average = sum(grades) / len(grades)
    print(f"{name}の平均点: {average:.1f}")

在庫管理システム

# 在庫管理
inventory = {
    "りんご": {"数量": 50, "価格": 120},
    "バナナ": {"数量": 30, "価格": 80},
    "オレンジ": {"数量": 25, "価格": 100}
}

# 在庫状況の表示
print("=== 在庫状況 ===")
for item, details in inventory.items():
    quantity = details["数量"]
    price = details["価格"]
    total_value = quantity * price
    print(f"{item}: {quantity}個, 単価{price}円, 総額{total_value}円")

# 合計在庫価値
total_inventory_value = sum(
    details["数量"] * details["価格"] 
    for details in inventory.values()
)
print(f"\n総在庫価値: {total_inventory_value}円")

練習問題

演習 1:買い物リスト管理

以下の機能を実装してください:

# 買い物リストの作成と管理
shopping_list = []

# TODO: 以下の機能を実装
# 1. アイテムの追加
# 2. アイテムの削除
# 3. リストの表示
# 4. アイテム数の確認

# ヒント: append(), remove(), len() を使用

期待される出力例:

買い物リスト: ['牛乳', 'パン', '卵', 'バター']
アイテム数: 4

演習 2:成績計算機

学生の成績を管理する辞書を作成し、平均点を計算してください:

# 学生成績の辞書
grades = {
    "数学": [85, 90, 78, 92],
    "英語": [88, 85, 91, 87],
    "理科": [92, 89, 85, 94]
}

# TODO: 各科目の平均点を計算して表示
# ヒント: sum() と len() を使用

演習 3:文字カウンター

文字列内の各文字の出現回数をカウントしてください:

text = "hello world"

# TODO: 各文字の出現回数を辞書で管理
# 期待される結果: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}

まとめ

学習内容の復習

今日学んだデータ型:

基本型: - 数値(int, float) - 文字列(str) - ブール(bool) - None

コレクション: - リスト(list)- 変更可能 - タプル(tuple)- 変更不可

高度な型: - 辞書(dict)- キー・値ペア - セット(set)- 重複なし

重要な操作: - インデックス・スライシング - メソッドの使用 - ループでの処理

次回の内容

次回のセッションでは: - 制御フロー - 条件分岐(if, elif, else) - ループ(for, while) - 制御文(break, continue)

宿題

今日の復習として: 1. 異なるデータ型で練習問題を再実行 2. 新しいリストメソッドを試す 3. より複雑な辞書構造を作成 4. セット演算を実験する

お疲れさまでした!

質問がありましたら、いつでもお気軽にどうぞ!

次回もお楽しみに! 🐍📊

ナビゲーション