😀
独学プログラマーメモ
基本的な四則演算や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):重複排除と集合演算
重複する要素を持たず、順序も保持しないデータ構造。
主な用途
- 重複の削除: リストをsetに変換することで、重複を一意にできる。
-
高速な検索: リストよりも
in演算子による検索(包含判定)が高速。 - 集合演算: 積集合(共通部分)、和集合、差集合などの計算。
# 重複の排除
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