😀

独学プログラマーメモ

に公開

基本的な四則演算やIF文やループ処理はPiazaでやったので知らなかった要素で抜き出す


1. 関数:オプション引数

デフォルト値を設定することで、呼び出し時の柔軟性を高める。

def squared(n, exp=2):
    """
    数値を累乗する。exp未指定時は二乗を返す。
    """
    return n ** exp
print(squared(10))    # 100
print(squared(10, 3)) # 1000

2. コンテナ:ミュータビリティの違い

オブジェクトが変更可能(Mutable)か、固定(Immutable)かは、データの整合性や用途により使い分ける必要がある。

リスト(Mutable / 可変)

インデックスを指定した動的な変更が可能である。データの追加・削除・変更が頻繁な場合に適している。

tech = ["Python", "C"]
tech[1] = "C++"  # 書き換え可能
tech.append("Rust") # リスト末尾に「Rust」を追加

タプル(Immutable / 不変)

作成後の変更を許可せず、データの整合性を保証する。一度定義したら変わらないデータ(座標や設定値など)に適している。

location = (35.08, 137.15)
# location[0] = 36.0  # TypeError: item assignment not supported

3. 辞書:マッピングとキーバリューペア

キー(Key)とバリュー(Value)を紐付け、ハッシュによる高速な検索を実現する。リストのような順序ではなく、ラベル(キー)でデータを管理する。

spec = {"model": "bZ4X", "battery": "71.4kWh"}
print(spec["model"])  # キーによる抽出

4. 集合(Set):重複排除と集合演算

重複する要素を持たず、順序も保持しないデータ構造。

主な用途

  1. 重複の削除: リストをsetに変換することで、重複を一意にできる。
  2. 高速な検索: リストよりもin演算子による検索(包含判定)が高速。
  3. 集合演算: 積集合(共通部分)、和集合、差集合などの計算。
# 重複の排除
ids = [101, 102, 101, 103]
unique_ids = set(ids)  # {101, 102, 103}

# 集合演算(共通要素の抽出)
skill_a = {"Python", "Java", "Go"}
skill_b = {"Python", "Ruby"}
common = skill_a & skill_b  # {'Python'}

5. イテラブル(Iterable)

リスト、タプル、辞書、集合など、ループ処理で要素を順次取り出し可能なオブジェクトの総称。

6. 実践:章末チャレンジ

本著内の課題に基づき、学習したコンテナを活用してデータを定義する。

# 1. 好きなミュージシャンのリスト作成
musicians = ["サカナクション", "ポルノグラフィティ", "suzumoku"]

# 2. 場所に緯度経度を持たせる(タプルのリスト)
# タプルを使用することで、各地点の座標が不変であることを保証する
locations = [
    (35.6895, 139.6917), # Tokyo
    (40.7128, -74.0060), # New York
    (51.5074, -0.1278)   # London
]

# 3. 自分の特徴をキーバリューのペアで持たせる(辞書)
my_profile = {
    "height": 175,
    "favorite_color": "Navy",
    "role": "Engineer",
    "favorite_author": "Cory Althoff"
}

# 4. ミュージシャンと曲リスト(辞書の中にリスト)
# キーにミュージシャン名、バリューに曲名のリストを持たせる
artist_songs = {
    "サカナクション": ["怪獣", "アルクアラウンド", "アイデンティティ"],
    "ポルノグラフィティ": ["ハネウマライダー", "MUGEN", "アゲハ蝶"],
    "suzumoku": ["モダンタイムス", "蛹", "鴉が泣くから"]
}

Discussion