[Pythonのはじめ方] Part7: リスト・タプル・辞書・セット

Python

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プログラミングの基礎となる非常に重要な要素です。それぞれの特性を理解し、状況に応じて適切なデータ型を選択できるようになりましょう! ✨

次は、リストをより簡潔に作成できる「リスト内包表記」について学びます。

参考情報

コメント

タイトルとURLをコピーしました