本ページでは、Pythonにおけるデータ型変換の方法を3分で理解できるようわかりやすく解説します。
そもそもなぜデータ型変換が必要なの?というところから、int関数・float関数・str関数などの組み込み関数の使い方まで網羅的に整理してご説明します。
Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください
Python:データ型変換とは?
データ型変換とは、その名の通り変数やオブジェクトのデータ型を別のデータ型に変換することです。
参考 データ型とは?
文字列として扱っていた変数を、数値型として扱うようにしたり、その逆で数値型を文字型として扱えるようにしたりするのがデータ型変換です。
人によっては、単に「型変換」と呼んだり、「キャストする」と言ったりしますが、どれも意味は同じです。
データ型変換の必要性
そもそもなぜデータ型変換を行う必要があるのでしょうか。
理由は大きく以下の4つです。
演算の正確性
Pythonの演算子は、オペランドの型によって異なる動作をします。
例えば、文字列の加算("5" + "7")は結果として文字列の連結("57")を行いますが、整数の加算(5 + 7)は算術の加算(12)を行います。これらの間違った結果を避けるためには、適切なデータ型に変換する必要があります。
a = "5" b = "7" print(a + b) # これは文字列の57を出力します # 変換後 a = int(a) b = int(b) print(a + b) # これは整数の12を出力します
参考 Pythonの変数の基本 / print関数の使い方
関数やメソッドの引数としての要件
Pythonの関数やメソッドは特定の型の引数を必要とすることがあります。
適切な型に変換せずにこれらの関数やメソッドを呼び出すと、エラーが発生します。したがって、データ型を適切に変換することで、これらの問題を防ぐことができます。
num_str = "123" print(num_str.zfill(5)) # これは00123を出力します # 変換後 num_str = int(num_str) # これはエラーを引き起こします: 'int' object has no attribute 'zfill' # print(num_str.zfill(5))
上記のzfill()
は文字列型のメソッドで、整数型には存在しません。したがって、適切な型に変換しないとエラーが発生します。
データの表現形式の変換
データを異なる形式で表現する必要がある場合に、データ型の変換が必要となります。
例えば、ユーザからの入力を整数として受け取り、それを文字列としてファイルに書き込む場合などです。
user_input = input("数値を入力してください: ") # ユーザーが5を入力したとします with open("output.txt", "w") as f: # user_inputは文字列なのでエラーは発生しません f.write(user_input)
input()
関数はユーザーからの入力を文字列として返すため、そのままwrite()
メソッドでファイルに書き込むことができます。しかし、input()
関数の結果を整数として扱う場合には、それを再び文字列に変換する必要があります。
参考 関数とは?
データの処理効率
異なるデータ型は異なる効率性を持つことがあります。
例えば、リストとセットではメンバーシップテスト(要素が含まれているかどうかのチェック)の効率性が異なります。リストではこれはO(n)の操作であるのに対し、セットではこれはO(1)の操作です。したがって、特定の操作を効率的に行うためには、適切なデータ型に変換することが有用な場合があります。
import time n = 10**6 # 大きな数値 lst = list(range(n)) s = set(lst) start = time.time() print(n in lst) # リストでは線形探索 print("リストの探索時間:", time.time() - start) start = time.time() print(n in s) # セットでは定数時間の探索 print("セットの探索時間:", time.time() - start)
この例では、リストとセットのメンバーシップテストの効率性の違いを示しています。リストでは要素の存在確認は線形時間がかかりますが、セットでは一定時間で完了します。
大きなデータ集合に対する操作を行う場合、適切なデータ型に変換することで処理速度を大幅に改善することが可能です。
データ型変換を行う主な組み込み関数
データ型変換の基本・必要性を学習してきました。ここからは、実際にデータ型の変換を行う組み込み関数の利用方法をサンプルコード付きでご説明します。
Python:int関数
文字列または数値を整数に変換します。
s = "123" i = int(s) # 文字列から整数への変換 print(i) # これは123を出力します f = 123.456 i = int(f) # 浮動小数点数から整数への変換 print(i) # これは123を出力します。小数部は切り捨てられます。
Python:str関数
任意のオブジェクトを文字列に変換します。
i = 123 s = str(i) # 整数から文字列への変換 print(s) # これは"123"を出力します f = 123.456 s = str(f) # 浮動小数点数から文字列への変換 print(s) # これは"123.456"を出力します
Python:float関数
文字列または数値を浮動小数点数に変換します。
s = "123.456" f = float(s) # 文字列から浮動小数点数への変換 print(f) # これは123.456を出力します i = 123 f = float(i) # 整数から浮動小数点数への変換 print(f) # これは123.0を出力します
Python:bool()関数
任意のオブジェクトをブール値に変換します。
i = 0 b = bool(i) # 整数からブール値への変換。0はFalse、0以外はTrueになります。 print(b) # これはFalseを出力します s = "Hello" b = bool(s) # 文字列からブール値への変換。空文字列はFalse、それ以外はTrueになります。 print(b) # これはTrueを出力します
# 数値の例 print(bool(0)) # これはFalseを出力します print(bool(1)) # これはTrueを出力します print(bool(-1)) # これはTrueを出力します # 文字列の例 print(bool("")) # これはFalseを出力します print(bool("Hello")) # これはTrueを出力します # リスト、タプル、セット、辞書の例 print(bool([])) # これはFalseを出力します print(bool([1, 2, 3])) # これはTrueを出力します print(bool(())) # これはFalseを出力します print(bool((1, 2, 3))) # これはTrueを出力します print(bool({})) # これはFalseを出力します print(bool({1: "one", 2: "two"})) # これはTrueを出力します # Noneの例 print(bool(None)) # これはFalseを出力します
Python:list()関数
任意のデータ構造(リスト、タプル、セット、辞書、文字列など)をリストに変換します。
t = (1, 2, 3) l = list(t) # タプルからリストへの変換 print(l) # これは[1, 2, 3]を出力します s = "Hello" l = list(s) # 文字列からリストへの変換。各文字がリストの要素になります。 print(l) # これは['H', 'e', 'l', 'l', 'o']を出力します
Python:tuple()関数
任意のデータ構造をタプルに変換します。
l = [1, 2, 3] t = tuple(l) # リストからタプルへの変換 print(t) # これは(1, 2, 3)を出力します s = "Hello" t = tuple(s) # 文字列からタプルへの変換。各文字がタプルの要素になります。 print(t) # これは('H', 'e', 'l', 'l', 'o')を出力します
Python:set()関数
任意のデータ構造をセットに変換します。
セットは順序を保持せず、重複した要素を取り除きます。
l = [1, 2, 2, 3, 3, 3] s = set(l) # リストからセットへの変換。重複した要素は取り除かれます。 print(s) # これは{1, 2, 3}を出力します s = "Hello" s = set(s) # 文字列からセットへの変換。各文字がセットの要素になります。 print(s) # これは{'H', 'e', 'l', 'o'}を出力します。重複した'l'は取り除かれます。
Python:dict()関数
2要素のシーケンス(例えば、2要素のリストやタプル)を要素に持つデータ構造を辞書に変換します。各シーケンスの最初の要素がキー、2番目の要素が値となります。
l = [('one', 1), ('two', 2), ('three', 3)] d = dict(l) # リストから辞書への変換 print(d) # これは{'one': 1, 'two': 2, 'three': 3}を出力します t = (('one', 1), ('two', 2), ('three', 3)) d = dict(t) # タプルから辞書への変換 print(d) # これは{'one': 1, 'two': 2, 'three': 3}を出力します
以上がPythonの主要なコレクション型への変換関数の使用方法です。これらの関数を使用して、必要に応じてデータ型を容易に変換することができます。
データ型判定:type関数
Pythonの type()
関数は、引数として与えられたオブジェクトの型を返します。
この関数はデバッグや、変数の型が何であるかを確認する際に特に役立ちます。また、特定の型を期待する関数やメソッドがある場合、その引数が適切な型であることを検証するためにも使われます。
x = 10 print(type(x)) # <class 'int'>を出力 y = "Hello, world!" print(type(y)) # <class 'str'>を出力 z = [1, 2, 3, 4, 5] print(type(z)) # <class 'list'>を出力 a = {"one": 1, "two": 2, "three": 3} print(type(a)) # <class 'dict'>を出力
上記のコードでは、type()
関数はそれぞれ整数、文字列、リスト、辞書の型を返しています。
このように、type()
関数を使用すると、特定の変数がどのような型を持っているかを簡単に調べることができます。
Python:データ型変換のまとめ
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!