Pythonのデータ型徹底解説:リスト、辞書、タプル、セット

プログラミング

Pythonのデータ型徹底解説

Pythonにおけるデータ型は、プログラムが扱う情報の種類を定義する基本的な要素です。ここでは、特に重要で頻繁に使用されるコレクション型であるリスト、辞書、タプル、セットについて、その特性、操作方法、そして実用的な例を詳しく解説します。

リスト (List)

リストは、順序付けられた、変更可能な(ミュータブルな)要素のコレクションです。角括弧 `[]` で定義され、カンマ `,` で区切られた要素を含みます。リストは、異なるデータ型の要素を混在させることができ、非常に柔軟なデータ構造です。

リストの定義とアクセス

“`python
my_list = [1, “hello”, 3.14, True]
print(my_list[0]) # 出力: 1
print(my_list[1]) # 出力: hello
print(my_list[-1]) # 出力: True (末尾からアクセス)
“`

リストの操作

  • 追加: `append()` メソッドで末尾に追加、`insert()` メソッドで指定した位置に追加します。
  • 削除: `remove()` メソッドで値に基づいて削除、`pop()` メソッドで指定した位置の要素を削除(または末尾を削除)します。`del` キーワードで指定した位置の要素を削除することも可能です。
  • 変更: インデックスを指定して要素を直接変更できます。
  • スライス: リストの一部を取り出すことができます。`my_list[start:end:step]` の形式で指定します。
  • 長さ: `len()` 関数で要素の数を取得できます。

リストの例

“`python
fruits = [“apple”, “banana”, “cherry”]
fruits.append(“orange”)
print(fruits) # 出力: [‘apple’, ‘banana’, ‘cherry’, ‘orange’]

fruits.insert(1, “grape”)
print(fruits) # 出力: [‘apple’, ‘grape’, ‘banana’, ‘cherry’, ‘orange’]

fruits.remove(“banana”)
print(fruits) # 出力: [‘apple’, ‘grape’, ‘cherry’, ‘orange’]

first_fruit = fruits.pop(0)
print(first_fruit) # 出力: apple
print(fruits) # 出力: [‘grape’, ‘cherry’, ‘orange’]

fruits[0] = “kiwi”
print(fruits) # 出力: [‘kiwi’, ‘cherry’, ‘orange’]

print(fruits[0:2]) # 出力: [‘kiwi’, ‘cherry’]
print(len(fruits)) # 出力: 3
“`

辞書 (Dictionary)

辞書は、キーと値のペアを格納する、順序付けられていない(Python 3.7以降では挿入順が保持される)、変更可能な(ミュータブルな)コレクションです。波括弧 `{}` で定義され、`キー: 値` の形式で要素が格納されます。キーは一意でなければならず、イミュータブルなデータ型(文字列、数値、タプルなど)である必要があります。

辞書の定義とアクセス

“`python
my_dict = {“name”: “Alice”, “age”: 30, “city”: “New York”}
print(my_dict[“name”]) # 出力: Alice
print(my_dict.get(“age”)) # 出力: 30
“`
`get()` メソッドを使用すると、キーが存在しない場合にエラーではなく `None` を返すため、より安全にアクセスできます。

辞書の操作

  • 追加/変更: 新しいキーを指定して値を代入するか、既存のキーに新しい値を代入することで行います。
  • 削除: `del` キーワードでキーを指定して削除、`pop()` メソッドでキーを指定して削除(削除した値を返す)します。`popitem()` メソッドで最後の要素(キーと値のペア)を削除(削除したペアを返す)します。
  • キー/値/アイテムの取得: `keys()` メソッドで全てのキー、`values()` メソッドで全ての値、`items()` メソッドで全てのキーと値のペアを取得できます。
  • 存在確認: `in` 演算子でキーが存在するか確認できます。

辞書の例

“`python
person = {“name”: “Bob”, “age”: 25}
person[“city”] = “London”
print(person) # 出力: {‘name’: ‘Bob’, ‘age’: 25, ‘city’: ‘London’}

person.update({“age”: 26, “job”: “Engineer”})
print(person) # 出力: {‘name’: ‘Bob’, ‘age’: 26, ‘city’: ‘London’, ‘job’: ‘Engineer’}

del person[“city”]
print(person) # 出力: {‘name’: ‘Bob’, ‘age’: 26, ‘job’: ‘Engineer’}

age = person.pop(“age”)
print(age) # 出力: 26
print(person) # 出力: {‘name’: ‘Bob’, ‘job’: ‘Engineer’}

print(person.keys()) # 出力: dict_keys([‘name’, ‘job’])
print(person.values()) # 出力: dict_values([‘Bob’, ‘Engineer’])
print(person.items()) # 出力: dict_items([(‘name’, ‘Bob’), (‘job’, ‘Engineer’)])

print(“name” in person) # 出力: True
print(“city” in person) # 出力: False
“`

タプル (Tuple)

タプルは、順序付けられた、変更不可能な(イミュータブルな)要素のコレクションです。丸括弧 `()` で定義され、カンマ `,` で区切られた要素を含みます。リストと似ていますが、一度作成すると要素の追加、削除、変更ができません。

タプルの定義とアクセス

“`python
my_tuple = (1, “world”, 2.718)
print(my_tuple[0]) # 出力: 1
print(my_tuple[1]) # 出力: world
“`

タプルの操作

  • アクセス: リストと同様にインデックスやスライスでアクセスできます。
  • 要素数: `len()` 関数で要素の数を取得できます。
  • 要素の存在確認: `in` 演算子で要素が存在するか確認できます。
  • カウント: `count()` メソッドで指定した要素の出現回数を取得できます。
  • インデックス取得: `index()` メソッドで指定した要素の最初の出現位置を取得できます。

タプルの例

“`python
coordinates = (10, 20)
print(coordinates[0]) # 出力: 10

print(len(coordinates)) # 出力: 2

print(10 in coordinates) # 出力: True

my_tuple = (1, 2, 2, 3, 2)
print(my_tuple.count(2)) # 出力: 3

print(my_tuple.index(3)) # 出力: 3
“`
タプルは、変更できないという特性から、データの整合性を保ちたい場合や、辞書のキーとして使用する場合などに適しています。

セット (Set)

セットは、順序付けられていない、重複しない要素のコレクションです。波括弧 `{}` で定義されますが、空のセットを作成する場合は `set()` を使用します。セットは、集合論的な操作(和集合、積集合、差集合など)を行うのに非常に役立ちます。

セットの定義とアクセス

“`python
my_set = {1, 2, 3, 2, 1} # 重複は自動的に除去される
print(my_set) # 出力例: {1, 2, 3} (順序は不定)

# 空のセットの作成
empty_set = set()
“`
セットの要素は順序付けられていないため、インデックスによるアクセスはできません。

セットの操作

  • 追加: `add()` メソッドで要素を追加します。
  • 削除: `remove()` メソッドで要素を削除(存在しない場合はエラー)、`discard()` メソッドで要素を削除(存在しなくてもエラーにならない)します。`pop()` メソッドで任意の要素を削除(削除した要素を返す)します。
  • 集合演算:
    • 和集合 (Union): `union()` メソッドまたは `|` 演算子
    • 積集合 (Intersection): `intersection()` メソッドまたは `&` 演算子
    • 差集合 (Difference): `difference()` メソッドまたは `-` 演算子
    • 対称差集合 (Symmetric Difference): `symmetric_difference()` メソッドまたは `^` 演算子
  • 包含関係: `issubset()` メソッド、`issuperset()` メソッド

セットの例

“`python
numbers = {1, 2, 3, 4}
numbers.add(5)
print(numbers) # 出力例: {1, 2, 3, 4, 5}

numbers.remove(3)
print(numbers) # 出力例: {1, 2, 4, 5}

numbers.discard(10) # エラーにならない
print(numbers) # 出力例: {1, 2, 4, 5}

set1 = {1, 2, 3}
set2 = {3, 4, 5}

print(set1.union(set2)) # 出力: {1, 2, 3, 4, 5}
print(set1 | set2) # 出力: {1, 2, 3, 4, 5}

print(set1.intersection(set2)) # 出力: {3}
print(set1 & set2) # 出力: {3}

print(set1.difference(set2)) # 出力: {1, 2}
print(set1 – set2) # 出力: {1, 2}

print(set1.issubset(set2)) # 出力: False
“`

その他のデータ型

上記以外にもPythonには様々なデータ型が存在します。

文字列 (String)

文字のシーケンスであり、シングルクォート `’` またはダブルクォート `”` で囲んで表現します。文字列はイミュータブルです。

“`python
message = “Hello, Python!”
print(message[0]) # 出力: H
print(message.upper()) # 出力: HELLO, PYTHON!
“`

数値型 (Numeric Types)

* 整数型 (int): 整数を表します。
* 浮動小数点数型 (float): 小数点数を含む数値を表します。
* 複素数型 (complex): 複素数を表します。

“`python
age = 100
pi = 3.14159
complex_num = 2 + 3j
“`

ブール型 (bool)

真偽値を表し、`True` と `False` の2つの値のみを持ちます。条件分岐などで使用されます。

“`python
is_active = True
is_valid = False
“`

None型 (NoneType)

値が存在しないことを表します。`None` という単一の値のみを持ちます。

“`python
result = None
“`

まとめ
Pythonのリスト、辞書、タプル、セットは、それぞれ異なる特性を持つ強力なコレクション型です。リストは柔軟で変更可能、辞書はキーによる高速なデータアクセス、タプルは変更不可能なデータの保持、セットは重複のない要素の管理と集合演算に最適です。これらのデータ型を理解し、適切に使い分けることで、より効率的で保守性の高いPythonコードを作成することができます。また、文字列、数値型、ブール型、None型といった基本的なデータ型も、Pythonプログラミングの基礎となります。