Pythonで複数のデータをまとめて扱うための基本的な方法を学びましょう!
プログラミングをしていると、たくさんのデータを扱いたい場面がたくさん出てきます。例えば、テストの点数一覧、ユーザーの名前リスト、設定情報などです。Pythonには、これらのデータを効率的に管理するための強力な「コレクション」と呼ばれるデータ型が用意されています。
このセクションでは、特に重要な4つのコレクション型、リスト (list)、タプル (tuple)、辞書 (dict)、セット (set) について、それぞれの特徴と使い方を解説していきます。💪
リスト (list): 順序付きで変更可能なコレクション 📝
[]
を使って作成し、カンマ ,
で区切って要素を並べます。リストの最大の特徴は、要素の順序が保持され、後から要素を追加、変更、削除できることです。同じ値の要素を複数持つこともできます。基本的な使い方
リストの作成:
# 空のリスト
empty_list = []
print(empty_list)
# 数値のリスト
numbers = [1, 5, 2, 8, 3]
print(numbers)
# 文字列のリスト
fruits = ["apple", "banana", "cherry"]
print(fruits)
# 異なるデータ型を含むリスト
mixed_list = [10, "hello", 3.14, True]
print(mixed_list)
要素へのアクセス (インデックス):
インデックスは 0
から始まります。
fruits = ["apple", "banana", "cherry"]
print(fruits[0]) # 先頭の要素 'apple'
print(fruits[1]) # 2番目の要素 'banana'
print(fruits[-1]) # 末尾の要素 'cherry'
要素の変更:
fruits = ["apple", "banana", "cherry"]
fruits[1] = "blueberry" # 2番目の要素を 'blueberry' に変更
print(fruits)
要素の追加:
fruits = ["apple", "banana", "cherry"]
fruits.append("orange") # 末尾に追加
print(fruits)
fruits.insert(1, "grape") # インデックス1の位置に追加
print(fruits)
要素の削除:
fruits = ["apple", "grape", "banana", "cherry", "orange"]
# 値を指定して削除 (最初に見つかったもの)
fruits.remove("banana")
print(fruits)
# インデックスを指定して削除 (削除した要素が返される)
removed_fruit = fruits.pop(1) # インデックス1の 'grape' を削除
print(f"削除された要素: {removed_fruit}")
print(fruits)
# インデックスを指定して削除 (del文)
del fruits[0] # インデックス0の 'apple' を削除
print(fruits)
リストは非常に柔軟性が高く、様々な場面で活躍します。
タプル (tuple): 順序付きで変更不可能なコレクション 🔒
()
を使って作成します(括弧は省略可能な場合もあります)。リストと似ていますが、最大の違いは一度作成したら要素を変更できない (イミュータブル) 点です。順序は保持され、同じ値の要素を複数持つこともできます。基本的な使い方
タプルの作成:
# 空のタプル
empty_tuple = ()
print(empty_tuple)
# 数値のタプル
numbers = (1, 5, 2, 8, 3)
print(numbers)
# 文字列のタプル (括弧を省略)
fruits = "apple", "banana", "cherry"
print(fruits)
# 異なるデータ型を含むタプル
mixed_tuple = (10, "hello", 3.14, True)
print(mixed_tuple)
# 要素が1つのタプルの注意点: 末尾にカンマが必要!
single_tuple = (1,) # これはタプル
not_a_tuple = (1) # これはただの整数 1
print(type(single_tuple))
print(type(not_a_tuple))
要素へのアクセス (インデックス):
リストと同様にインデックスでアクセスできます。
fruits = ("apple", "banana", "cherry")
print(fruits[0]) # 'apple'
print(fruits[-1]) # 'cherry'
変更不可 (イミュータブル):
タプルの要素を変更しようとするとエラーになります。
fruits = ("apple", "banana", "cherry")
# fruits[1] = "blueberry" # これは TypeError になる!
アンパッキング:
タプルの要素を個別の変数に展開できます。
point = (10, 20)
x, y = point # アンパッキング
print(f"x座標: {x}, y座標: {y}")
タプルは、変更されたくない定数的なデータの集まりや、関数の戻り値として複数の値を返す場合などによく使われます。また、リストよりも若干メモリ効率が良い、辞書のキーとして使える(リストは使えない)といった利点もあります。
辞書 (dict): キーと値のペアのコレクション 🔑
{}
を使い、キー: 値
というペアでデータを格納します。各ペアはカンマ ,
で区切ります。最大の特徴は、キーを使って値に高速にアクセスできることです。キーは一意(ユニーク)でなければならず、変更不可能な型(数値、文字列、タプルなど)である必要があります。値は何でもOKです。Python 3.7以降では、要素が追加された順序が保持されるようになりましたが、それ以前のバージョンや、順序に依存しない使い方をするのが一般的です。基本的な使い方
辞書の作成:
# 空の辞書
empty_dict = {}
print(empty_dict)
# 学生のスコア (キー: 名前, 値: 点数)
scores = {"Alice": 85, "Bob": 92, "Charlie": 78}
print(scores)
# 異なるデータ型のキーと値
config = {"host": "localhost", "port": 8080, "debug_mode": True}
print(config)
値へのアクセス (キー):
scores = {"Alice": 85, "Bob": 92, "Charlie": 78}
print(scores["Bob"]) # キー 'Bob' の値を取得
# get() メソッドを使うと、キーが存在しない場合にエラーではなくNoneやデフォルト値を返せる
print(scores.get("Alice"))
print(scores.get("David")) # キーが存在しない場合は None
print(scores.get("David", 0)) # キーが存在しない場合にデフォルト値 0 を返す
要素の追加・変更:
scores = {"Alice": 85, "Bob": 92}
scores["Charlie"] = 78 # 新しいキーと値を追加
print(scores)
scores["Alice"] = 88 # 既存のキーの値を更新
print(scores)
要素の削除:
scores = {"Alice": 88, "Bob": 92, "Charlie": 78}
# キーを指定して削除 (削除した値が返される)
removed_score = scores.pop("Bob")
print(f"削除されたスコア: {removed_score}")
print(scores)
# キーを指定して削除 (del文)
del scores["Charlie"]
print(scores)
キー、値、ペアの取得:
scores = {"Alice": 88, "Bob": 92, "Charlie": 78}
print(scores.keys()) # キーの一覧を取得
print(scores.values()) # 値の一覧を取得
print(scores.items()) # (キー, 値) のペアの一覧を取得
# ループでよく使われる
for name, score in scores.items():
print(f"{name}: {score}")
辞書は、設定情報、JSONデータの表現、オブジェクトの属性管理など、名前(キー)とそれに対応する値(情報)を結びつけて管理したい場合に非常に便利です。
セット (set): 重複しない要素のコレクション 🧩
{}
を使って作成しますが、辞書と区別するために要素のみをカンマ ,
で区切って並べます(キー: 値
の形式ではない)。セットの最大の特徴は、要素が重複しないことと、順序が保証されないことです。数学の集合のように、和集合や積集合などの演算が可能です。要素の追加や削除は可能です。
注意: 空のセットを作成する場合は
{}
ではなく set()
を使います。{}
は空の辞書を作成します。基本的な使い方
セットの作成:
# 空のセット (set() を使う!)
empty_set = set()
print(empty_set)
# 数値のセット (重複は自動的に削除される)
numbers = {1, 5, 2, 8, 3, 5, 1}
print(numbers) # 出力例: {1, 2, 3, 5, 8} (順序は保証されない)
# 文字列のセット
fruits = {"apple", "banana", "cherry", "apple"}
print(fruits) # 出力例: {'cherry', 'banana', 'apple'}
# リストからセットを作成 (重複削除)
my_list = [1, 2, 2, 3, 1, 4]
my_set = set(my_list)
print(my_set) # {1, 2, 3, 4}
要素の追加:
fruits = {"apple", "banana"}
fruits.add("cherry")
print(fruits)
fruits.add("apple") # すでに存在するので変化なし
print(fruits)
要素の削除:
fruits = {"apple", "banana", "cherry"}
# 値を指定して削除 (要素が存在しない場合は KeyError)
fruits.remove("banana")
print(fruits)
# fruits.remove("grape") # KeyErrorになる
# 値を指定して削除 (要素が存在しなくてもエラーにならない)
fruits.discard("apple")
print(fruits)
fruits.discard("grape") # エラーにならない
print(fruits)
# 任意の要素を削除して返す (空の場合は KeyError)
removed_fruit = fruits.pop()
print(f"削除された要素: {removed_fruit}")
print(fruits)
集合演算:
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}
# 和集合 (| または union()) : 両方に含まれる要素
print(set_a | set_b) # {1, 2, 3, 4, 5, 6}
print(set_a.union(set_b))
# 積集合 (& または intersection()) : 両方に共通する要素
print(set_a & set_b) # {3, 4}
print(set_a.intersection(set_b))
# 差集合 (- または difference()) : set_a にだけ含まれる要素
print(set_a - set_b) # {1, 2}
print(set_a.difference(set_b))
# 対称差 (^ または symmetric_difference()) : どちらか一方にだけ含まれる要素
print(set_a ^ set_b) # {1, 2, 5, 6}
print(set_a.symmetric_difference(set_b))
セットは、要素の重複をなくしたい場合や、メンバーシップ(要素が含まれているかどうか)を高速にチェックしたい場合、集合演算を行いたい場合に役立ちます。
まとめ: コレクションの比較と使い分け 🤔
ここまで4つの基本的なコレクション型を見てきました。それぞれの特徴をまとめると以下のようになります。
データ型 | 記法例 | 順序 | 変更可能性 (ミュータブル) | 要素の重複 | 主な用途 |
---|---|---|---|---|---|
リスト (list) | [1, 2, 3] | あり | 可能 | 可能 | 順序が重要で、後から変更する可能性があるデータの集まり |
タプル (tuple) | (1, 2, 3) または 1, 2, 3 | あり | 不可 | 可能 | 変更しないデータの集まり、関数の多値返却、辞書のキー |
辞書 (dict) | {'a': 1, 'b': 2} | なし (3.7+ は挿入順序保持) | 可能 (値、ペアの追加/削除) | キーは不可、値は可能 | キーと値のペアでデータを管理、設定情報、JSON類似構造 |
セット (set) | {1, 2, 3} (空は set() ) | なし | 可能 (要素の追加/削除) | 不可 | 重複の排除、メンバーシップテスト、集合演算 |
これらのコレクションは、Pythonプログラミングの基礎となる非常に重要な要素です。それぞれの特性を理解し、状況に応じて適切なデータ型を選択できるようになりましょう! ✨
次は、リストをより簡潔に作成できる「リスト内包表記」について学びます。
参考情報
- Python 公式ドキュメント – データ構造: リスト、タプル、セット、辞書に関する詳細な公式解説です。
- W3Schools Python Lists (英語): 初心者にも分かりやすいリストの解説と例です。(他のコレクションについても同様のページがあります)
コメント