Python は多様なデータ型をサポートしており、それぞれ異なる目的や特徴を持っています。この記事では、Python で利用できる主要なデータ型について、近年の情報やサンプルコードを交えながら解説します。
データ型の種類
Pythonには以下のようなデータ型があります。
| データ型 | 説明 | 例 |
|---|---|---|
| 数値型 | 整数 (int), 浮動小数点数 (float), 複素数 (complex) | x = 10, y = 3.14, z = 1 + 2j |
| 文字列型 (str) | 文字の並び | message = "Hello, world!" |
| 真偽型 (bool) | True または False | is_valid = True |
| シーケンス型 | リスト (list), タプル (tuple), レンジ (range) | my_list = [1, 2, 3], my_tuple = (4, 5, 6), numbers = range(1, 10) |
| マッピング型 | 辞書 (dict) | person = {"name": "Alice", "age": 30} |
| 集合型 | 集合 (set), 凍結集合 (frozenset) | my_set = {1, 2, 3}, my_frozenset = frozenset({4, 5, 6}) |
| バイナリ型 | バイト列 (bytes), バイト配列 (bytearray), メモリビュー (memoryview) | data = b"hello", mutable_data = bytearray(b"world"), view = memoryview(data) |
各データ型の詳細
1. 数値型 (Numeric types)
Python には、整数、浮動小数点数、複素数の3つの数値型があります。
整数 (int)
整数値を扱います。Python の整数型は、メモリの許す限り無限の桁数を表現できます。
# 整数の定義と型確認 integer_number = 10 print(type(integer_number)) # <class 'int'>
浮動小数点数 (float)
実数を扱います。小数点を含む数値や指数表記で表現します。
# 浮動小数点数の定義と型確認 float_number = 3.14 print(type(float_number)) # <class 'float'>
複素数 (complex)
実部と虚部を持つ複素数を扱います。虚部は j または J を付けて表現します。
# 複素数の定義と型確認 complex_number = 1 + 2j print(type(complex_number)) # <class 'complex'> print(complex_number.real) # 実部 1.0 print(complex_number.imag) # 虚部 2.0
2. 文字列型 (str)
文字列は文字の並びを表現します。文字列はシングルクォート (')、ダブルクォート (")、またはトリプルクォート (''' または """) で囲んで作成します。
# 文字列の定義と型確認 string_single = 'Hello' string_double = "World" string_triple = '''This is a multi-line string.''' print(type(string_single)) # <class 'str'>
文字列に対しては、様々な操作が可能です。
- 文字列の結合:
+演算子で文字列を結合できます。 - 文字列の長さ:
len()関数で文字列の長さを取得できます。 - 文字列の分割:
split()メソッドで文字列を指定した区切り文字で分割できます。 - 文字列の検索:
find()メソッドで文字列内の部分文字列を検索できます。 - 文字列の置換:
replace()メソッドで文字列を置換できます。
# 文字列操作の例 greeting = "Hello, " + "world!" # 文字列の結合 print(greeting) print(len(greeting)) # 文字列の長さを取得 words = greeting.split(", ") # ", " で文字列を分割 print(words) index = greeting.find("world") # "world" の位置を検索 print(index) new_greeting = greeting.replace("world", "Python") print(new_greeting)
3. 真偽型 (bool)
真偽型は True または False のいずれかの値を取ります。主に条件分岐や論理演算で使用されます。
# 真偽値の定義と型確認 is_true = True is_false = False print(type(is_true)) # <class 'bool'> # 論理演算の例 print(is_true and is_false) # False print(is_true or is_false) # True print(not is_true) # False
4. シーケンス型
シーケンス型は、複数の要素を順番に並べたデータ構造です。リスト、タプル、レンジの3種類があります。
リスト (list)
リストは、変更可能な要素の並びです。[] を使用して作成し、要素はカンマで区切ります。異なる型の要素を混在させることができます。
# リストの定義と型確認 my_list = [1, "apple", True, 3.14] print(type(my_list)) # <class 'list'>
リストに対しては、様々な操作が可能です。
- 要素へのアクセス: インデックス (0 から始まる) を使用して要素にアクセスできます。
- 要素の追加:
append()メソッドでリストの末尾に要素を追加できます。 - 要素の挿入:
insert()メソッドで指定した位置に要素を挿入できます。 - 要素の削除:
remove()メソッドで指定した要素を削除できます。 - リストの長さ:
len()関数でリストの長さを取得できます。
# リスト操作の例 print(my_list[0]) # 最初の要素にアクセス (1) my_list.append("banana") # 末尾に "banana" を追加 print(my_list) my_list.insert(1, "orange") # 1番目にorangeを挿入 print(my_list) my_list.remove("apple") # "apple" を削除 print(my_list) print(len(my_list)) # リストの長さを取得
タプル (tuple)
タプルは、変更不可能な要素の並びです。() を使用して作成し、要素はカンマで区切ります。リストと同様に、異なる型の要素を混在させることができます。
# タプルの定義と型確認 my_tuple = (1, "apple", True, 3.14) print(type(my_tuple)) # <class 'tuple'>
タプルは変更できないため、要素の追加、挿入、削除はできません。 主な利用場面は、関数の戻り値として複数の値を返す場合などです。
# タプルの要素へのアクセス print(my_tuple[1]) # apple
レンジ (range)
レンジは、連続した整数の範囲を表すイテラブル(繰り返し可能)オブジェクトです。range() 関数を使用して作成します。
range() の第1引数に終了値、第2引数に開始値、第3引数にステップ数を指定します。
# レンジの定義と型確認 numbers = range(1, 10, 2) # 1 から 9 まで、2 ずつ増加する整数列 print(type(numbers)) # <class 'range'> # レンジを使ったループ処理 for i in numbers: print(i)
5. マッピング型
辞書 (dict)
辞書は、キーと値のペアを格納するデータ構造です。{} を使用して作成し、キーと値のペアは : で区切り、各ペアはカンマで区切ります。キーは一意である必要がありますが、値は重複しても構いません。
# 辞書の定義と型確認 person = {"name": "Alice", "age": 30, "city": "New York"} print(type(person)) # <class 'dict'>
辞書に対する操作は以下のとおりです。
- 要素へのアクセス: キーを使用して対応する値にアクセスできます。
- 要素の追加/更新: 新しいキーと値のペアを追加したり、既存のキーの値を更新したりできます。
- 要素の削除:
delキーワードを使用してキーと値のペアを削除できます。 - キーの存在確認:
inキーワードを使用してキーが辞書に存在するかどうかを確認できます。
# 辞書操作の例 print(person["name"]) # "Alice" person["age"] = 31 # "age" の値を更新 person["job"] = "Engineer" # 新しいキーと値のペアを追加 print(person) del person["city"] # "city" のキーと値のペアを削除 print(person) print("name" in person) # True
6. 集合型
集合型は、重複しない要素の集まりを表現するデータ構造です。集合 (set) と凍結集合 (frozenset) の2種類があります。
集合 (set)
集合は、変更可能な要素の集合です。{} を使用して作成するか、set() 関数にリストなどのイテラブルオブジェクトを渡して作成します。
# 集合の定義と型確認 my_set = {1, 2, 3, 2, 1} # 重複する要素は自動的に削除される print(my_set) # {1, 2, 3} print(type(my_set)) # <class 'set'> another_set = set([3,4,4,5]) print(another_set)
集合に対しては、集合演算 (和集合、積集合、差集合など) を行うことができます。
# 集合演算の例 set1 = {1, 2, 3} set2 = {3, 4, 5} print(set1 | set2) # {1, 2, 3, 4, 5} (和集合) print(set1 & set2) # {3} (積集合) print(set1 - set2) # {1, 2} (差集合)
凍結集合 (frozenset)
凍結集合は、変更不可能な要素の集合です。frozenset() 関数を使用して作成します。集合演算は可能ですが、要素の追加や削除はできません。
# 凍結集合の定義と型確認 my_frozenset = frozenset({1, 2, 3}) print(type(my_frozenset)) # <class 'frozenset'>
7. バイナリ型
バイナリ型は、バイトデータを扱うためのデータ型です。バイト列、バイト配列、メモリビューの3種類があります。
バイト列 (bytes)
バイト列は、変更不可能なバイトの並びです。b プレフィックスを付けた文字列リテラル、または bytes() 関数を使用して作成します。
# バイト列の定義と型確認 byte_data = b"hello" print(type(byte_data)) # <class 'bytes'> # bytes([104, 101, 108, 108, 111]) でも可
バイト配列 (bytearray)
バイト配列は、変更可能なバイトの並びです。bytearray() 関数を使用して作成します。
# バイト配列の定義と型確認 mutable_data = bytearray(b"world") print(type(mutable_data)) # <class 'bytearray'>
バイト配列は変更可能なため、要素の変更、追加、削除が可能です。 バイトデータを書き換える必要がある場合に有用です。
# バイト配列の要素を変更 mutable_data[0] = ord('W') # ord() は文字の Unicode コードポイントを返す print(mutable_data)
メモリビュー (memoryview)
メモリビューは、バイト列やバイト配列などのオブジェクトの内部データへの参照を提供します。memoryview() 関数を使用して作成します。メモリビューを使用すると、データのコピーを作成せずに、元のデータの一部を読み書きできます。
# メモリビューの定義と型確認 view = memoryview(byte_data) print(type(view)) # <class 'memoryview'> print(view[0])
[PR]