概要

リストの仲間であるPythonのデータ型「タプル」と「セット」について、その違いと使い分けを解説します。一度作成したら変更できない(イミュータブルな)タプルの安全性と、順序がなく重複を許さないセットの性質を、具体的なコード例と共に紹介。
リストから重複値を削除するテクニックや、集合演算など、セットならではの強力な機能も説明します。リスト、タプル、セットの比較表と図解で、各データ型の役割を明確にし、適切な場面で選択するスキルが身につきます。
-
ゼロから始めるPython学習 STEP20目次
プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!
続きを見る
目次
はじめに
これまでのステップで、複数のデータを扱うための基本的なデータ型として「リスト」と「辞書」を学びました。Pythonには、これらと似ていますが、それぞれユニークな特徴を持つ「リストの仲間」がいます。それがタプル (tuple) とセット (set) です。
これらはリストと同じように複数のデータを格納できますが、「変更できるか」「重複を許すか」「順序があるか」といった点で明確な違いがあります。これらの違いを理解し、適切な場面で使い分けることで、より安全で効率的なプログラムを書くことができます。
タプル (tuple):変更できないリスト
タプルは、一言で言うと**「変更(追加・更新・削除)ができないリスト」です。一度作成したら、その中身を後から変えることはできません。この「変更できない」という性質をイミュータブル (immutable)** と呼びます。
作り方 タプルは丸括弧 ()
を使って作成します。
# 曜日のタプルを作成 days = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday') print(days) # 実行結果: ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
特徴
- 順序がある (Ordered): リストと同様に、格納した要素の順序は保持されます。インデックス番号を使って要素にアクセスできます。
print(days[0]) # -> 'Monday' print(days[2]) # -> 'Wednesday'
- 重複を許す (Allows Duplicates): 同じ値を複数格納することができます。
- 変更できない (Immutable): これが最大の特徴です。一度作成したタプルの要素を変更しようとするとエラーになります。
# days[0] = '月曜日' # -> TypeErrorが発生! # days.append('Holiday') # -> AttributeErrorが発生!
graph TD subgraph "タプル (days)" direction LR Index0["0: 'Monday'"] Index1["1: 'Tuesday'"] Index2["2: 'Wednesday'"] Index3["..."] end A[アクセス] --> Index0; B[変更しようとすると...] --> C((エラー発生!)); style C fill:#f99,stroke:#333,stroke-width:2px
どんな時に使うの? プログラムの中で、絶対に変わってほしくない、定数のようなデータの集まりを定義するのに最適です。
- 座標 (x, y)
- 色のRGB値 (Red, Green, Blue)
- 設定情報など、プログラムの実行中に変更されるべきではないデータ
変更できないため、意図しない書き換えを防ぐことができ、プログラムの安全性が高まります。また、一般的にリストよりも処理速度が少し速いというメリットもあります。
セット (set):順序なし・重複なしの集合
セットは、数学の**「集合」と同じ考え方を持つデータ型です。その最大の特徴は「順序がなく」「重複した値を許さない」**ことです。
作り方 セットは波括弧 {}
を使って作成しますが、辞書と区別するために キー: 値
の形式ではなく、値だけをカンマで区切って入れます。
# 果物のセットを作成('apple'が重複している点に注目) fruits = {'apple', 'orange', 'banana', 'apple', 'grape'} print(fruits) # 実行結果: {'grape', 'banana', 'orange', 'apple'} # ※実行するたびに順序は変わる可能性がある
実行結果を見ると、重複していた 'apple' が一つになり、格納した順序とは関係なく表示されていることがわかります。
特徴
- 順序がない (Unordered): 要素がどの順番で格納されているかは保証されません。そのため、インデックス番号で要素にアクセスすることはできません。
# print(fruits[0]) # -> TypeErrorが発生!
- 重複を許さない (No Duplicates): 同じ値を複数入れることはできず、自動的に一つにまとめられます。
- 変更できる (Mutable): セット自体に要素を追加したり、削除したりすることは可能です。
numbers = [1, 2, 5, 2, 3, 1, 4, 5] unique_numbers = list(set(numbers)) # 一度セットに変換してリストに戻す print(unique_numbers) # -> [1, 2, 3, 4, 5]
graph TD A[元のデータ] --> B["'apple', 'orange', 'banana', 'apple', 'grape'"]; B --> C{"セットに変換"}; subgraph "セット (fruits)" direction LR D["'apple'"] E["'orange'"] F["'banana'"] G["'grape'"] end C --> D; C --> E; C --> F; C --> G; H((重複は自動で除去)); I((順序は保持されない)); C -.-> H C -.-> I
どんな時に使うの? セットの「重複を許さない」という性質は、様々な場面で非常に役立ちます。
- リストから重複した要素を削除したい時
numbers = [1, 2, 5, 2, 3, 1, 4, 5] unique_numbers = list(set(numbers)) # 一度セットに変換してリストに戻す print(unique_numbers) # -> [1, 2, 3, 4, 5]
- 二つのグループに共通する要素(積集合)や、全ての要素(和集合)を見つけたい時
group_a = {'A', 'B', 'C', 'D'} group_b = {'C', 'D', 'E', 'F'} # 積集合 (AとBの両方に含まれる) print(group_a & group_b) # -> {'C', 'D'} # 和集合 (AとBのどちらかに含まれる) print(group_a | group_b) # -> {'F', 'E', 'B', 'D', 'C', 'A'}
リスト・タプル・セットの比較まとめ
特徴 | リスト (list) | タプル (tuple) | セット (set) |
記法 | [ ] | ( ) | { } |
順序 | あり | あり | なし |
重複 | あり | あり | なし |
変更 | 可能 (Mutable) | 不可能 (Immutable) | 可能 (Mutable) |
アクセス方法 | インデックス | インデックス | for ループ等(直接指定不可) |
まとめ
今回は、リストの仲間である「タプル」と「セット」について学びました。
- タプル: 変更されたくない固定のデータ群に使う。安全性が高い。
- セット: 重複を除きたい、順序は関係ない、グループ間の関係(共通点など)を見つけたい時に使う。
これら3つのデータ型は、それぞれに得意な役割があります。プログラムでデータを扱う際は、「このデータは後から変更する必要があるか?」「順序は重要か?」「重複はあっても良いか?」を自問自答することで、最適なデータ型を選択できるようになります。この使い分けができるようになると、より洗練されたコードが書けるようになります。
-
ゼロから始めるPython学習 STEP20目次
プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!
続きを見る