0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Udemy】Python動画講義学習 記録#5

0
Posted at

はじめに

こんにちは!Python学習に励む皆さんの並走者として、今日も学習記録をお届けします。

現在、Udemyの「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」(講師:酒井潤さん)を受講中です。今日は5日目。テーマは「コレクション型の使い分け」、具体的にはタプル・辞書・集合(set)の3つを学びました。


今日学んだこと

  • タプル型の特徴と使い所
  • アンパッキングを使った変数操作
  • 辞書型のメソッド一覧
  • 辞書のコピーと参照渡しの罠
  • 集合型の演算と活用シーン

1. タプル型

タプルはリストに似ていますが、一度作ったら中身を変更できないデータ型です。

# タプルの基本
my_tuple = (1, 2, 3)
print(my_tuple[0])  # インデックスは使える → 1

# 追加はできない(エラーになる)
# my_tuple.append(4)  # AttributeError!

💡 ポイント:カンマがタプルを作る

() があってもなくても、カンマ(,)があればタプルになります。

a = (1)   # これはただの整数
b = (1,)  # これがタプル
c = 1,    # ()なしでもカンマがあればタプル
print(type(a))  # <class 'int'>
print(type(b))  # <class 'tuple'>
print(type(c))  # <class 'tuple'>

要素を追加したい場合は、タプルを作り直す必要があります。

my_tuple = (1, 2, 3)
my_tuple = my_tuple + (4,)  # 作り直すことで「追加」は可能
print(my_tuple)  # (1, 2, 3, 4)

2. タプルのアンパッキング

アンパッキングとは、タプルの要素を複数の変数に一度に割り当てる機能です。

num_tuple = (1, 2)
a, b = num_tuple
print(a, b)  # 1 2

変数の入れ替えに使う

変数の値を交換するとき、従来は一時変数(tmp)が必要でした。

# 一時変数を使った方法(冗長)
x = 100
y = 200
tmp = x
x = y
y = tmp
print(x, y)  # 200 100

アンパッキングを使うと、たった1行で書けます。

# アンパッキングを使った方法(スッキリ!)
x = 100
y = 200
x, y = y, x
print(x, y)  # 200 100

⚠️ 多すぎる変数の同時宣言には注意

a, b, c, d, e = 1, 2, 3, 4, 5  # 書けるけど読みにくい

# 変数が多い場合はそれぞれ宣言したほうが分かりやすい
a = 1
b = 2

アンパッキングは「少数の変数の入れ替え」に活かすのがベストです。


3. タプルの使い所

「変更されたくないデータ」を守るのがタプルの真価です。

たとえばクイズシステムで、問題リストと回答リストを扱う場合を考えます。

# リストを使った場合(危険)
choose_question = [1, 2, 3]
answer = []
choose_question.append(1)  # 問題リストに誤って追加してもエラーが出ない!

# タプルを使った場合(安全)
choose_question = (1, 2, 3)
answer = []
answer.append(1)   # 回答リストへの追加はOK
answer.append(2)
# choose_question.append(4)  # これはエラーになる → バグを早期発見できる!

💡 「変えてはいけないデータ」にタプルを使うことで、意図しない変更をエラーとして検知できるのが最大のメリットです。


4. 辞書型のメソッド

辞書型はキーと値のペアでデータを管理します。主なメソッドをまとめます。

person = {'name': 'Alice', 'age': 20}

# keys / values:キーや値の一覧を取得
print(person.keys())    # dict_keys(['name', 'age'])
print(person.values())  # dict_values(['Alice', 20])

# get:値の取得
print(person.get('name'))  # Alice

# update:値の変更・追加
person.update({'age': 21, 'city': 'Tokyo'})
print(person)  # {'name': 'Alice', 'age': 21, 'city': 'Tokyo'}

# in:キーの存在確認
print('name' in person)  # True

# pop / del:値の削除
person.pop('city')
del person['age']
print(person)  # {'name': 'Alice'}

# clear:中身を空にする
person.clear()
print(person)  # {}

5. 辞書のコピー

辞書をそのまま代入すると「参照渡し」になり、片方を変更するともう片方も変わってしまいます。

# 参照渡し(危険)
original = {'a': 1}
copy = original
copy['a'] = 999
print(original)  # {'a': 999} ← 元データも変わってしまう!

# .copy() を使った正しいコピー
original = {'a': 1}
copy = original.copy()
copy['a'] = 999
print(original)  # {'a': 1} ← 元データは守られる
print(copy)      # {'a': 999}

⚠️ 辞書を別の変数に渡すときは、常に .copy() を意識する習慣をつけましょう。


6. 辞書の使い所

辞書の大きな強みは検索速度の速さです。

# リストで検索(遅い:全件走査が必要)
users = ['Alice', 'Bob', 'Carol']
print('Bob' in users)  # True だが内部的に先頭から探す

# 辞書で検索(速い:キーで直接アクセス)
user_dict = {'Alice': 1, 'Bob': 2, 'Carol': 3}
print('Bob' in user_dict)  # True(ハッシュで即座にアクセス)

データ量が多いほど辞書の速度優位性が際立ちます。


7. 集合型(set)

集合型は重複のないデータの集まりを扱います。演算が強力です。

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a & b)  # {3, 4}       ← かつ(積集合)
print(a | b)  # {1, 2, 3, 4, 5, 6}  ← または(和集合)
print(a ^ b)  # {1, 2, 5, 6} ← どちらか一方にしかない(排他的論理和)

集合のメソッド

my_set = {1, 2, 3}

my_set.add(4)     # 追加 → {1, 2, 3, 4}
my_set.remove(2)  # 削除 → {1, 3, 4}
my_set.clear()    # 空にする → set()
print(my_set)     # set()

集合の使い所

リストから重複を取り除いてユニークな種類だけ取り出すのに便利です。

access_log = ['Python', 'Java', 'Python', 'Ruby', 'Java', 'Python']
unique_languages = set(access_log)
print(unique_languages)  # {'Python', 'Java', 'Ruby'}

📝 理解度チェック:Claudeに確認テストをやってみた

今日の学習内容がちゃんと身についているか、Claudeに確認テストを作ってもらいました。

テスト結果

項目 結果
正解数 8 / 10
正答率 80%

💡 同じ立場の方へ:学習後すぐにテストするのは記憶の定着に効果的だと思いました!
Claudeに「〇〇についての確認テストを作って」と頼むだけで作ってくれます。


感想

今日の学習で一番印象に残ったのは、タプルを使う目的です。最初は「リストで全部解決できるのでは?」と思っていたのですが、「変えてはいけないデータにタプルを使うことで、バグを早期発見できる」という考え方がとても腑に落ちました。型を選ぶこと自体が、コードの意図を伝える手段になるんですね。

アンパッキングによる変数の入れ替え(x, y = y, x)も「なんでこれで動くんだ!」と感動しました。一時変数(tmp)を書いていた自分が懐かしく感じるくらい、スッキリした書き方です。

確認テストは10問中8問正解でした。間違えた問題はタプルの基本的な説明と、辞書に存在しないメソッドを選ぶ問題でした。どちらも「なんとなく理解した気になっていた」箇所だったので、テストのおかげで曖昧な部分が明確になりました。明日も引き続き頑張ります!


参考教材

この記事はUdemyの以下のコースを受講しながら学んだ内容を、自分の言葉でまとめたものです。

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル(講師: 酒井潤)

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?