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プログラミングの基礎となります。
