Python PR

【Python】任意のオブジェクトを型変換(キャスト)する方法

記事内に商品プロモーションを含む場合があります

この記事では、Pythonでオブジェクトの型を任意の型に変換する方法を解説します。

型変換することで任意のオブジェクトを必要な型に変換することができます。

関数などで取得できるオブジェクトは必ずしも使用したい型で受け取れるとは限りません。なのでそんな時は、受け取った値の型を変換する必要があります。

また、型変換することをキャストと言ったりします。

それでは、サンプルを混えながら型変換する方法を見ていきましょう!

型変換してみる

型変換するには、データ型のコンストラクタを用います。

型名 コンストラクタ
文字列 str()
整数 int()
浮動小数点数 float()
真偽値 bool()

任意のデータ型のコンストラクタに変換したいオブジェクトを渡すことで、そのデータ型のオブジェクトを生成することができる。

変数 = データ型のコンストラクタ(変換したいオブジェクト)

渡されたオブジェクトによっては変換できるとは限らない。
その場合は、ValueErrorが送出される。

s = 'abc'

# 整数に変換
num = int(s)

実行結果

Traceback (most recent call last):
  File "/Python/main.py", line 4, in 
    num = int(s)
ValueError: invalid literal for int() with base 10: 'abc'

文字列に変換

文字列型に変換するにはstr()を使います。
以下のコードでは、「整数型」のオブジェクトを「文字列型」に変換しています。

i = 1
print(type(i))

# 変換
s = str(i)
print(type(s))

実行結果

<class 'int'>
<class 'str'>

整数(int)型に変換する

整数型に変換するにはint()を使います。
以下のコードでは、「文字列型」のオブジェクトを「整数型」に変換しています。

s = '1'
print(type(s))

# 変換
i = int(s)
print(type(i))

実行結果

<class 'str'>
<class 'int'>

float型を変換する場合は、小数点以下は切り捨てられます。

i = int(3.14)
print(i)

i = int(0.99)
print(i)

実行結果

3
0

浮動小数点数(float)型に変換する

浮動小数点数型に変換するにはfloat()を使います。
以下のコードでは、「文字列型」のオブジェクトを「浮動小数点数型」に変換しています。

s = '3.14'
print(type(s))

f = float(s)
print(type(f))

実行結果

<class 'str'>
<class 'float'>

真偽値(bool)型に変換する

bool型に変換するにはbool()を使います。
以下のコードでは、「整数型」から「bool型」のオブジェクトを生成してみます。

b = bool(0)
print(b)

b = bool(1)
print(b)

実行結果

False
True

intfloatなどの数値型では0がFalse、それ以外がTrueとして変換されます。文字列や配列は空ならばFalse、空でなければTrueが生成されます。

0、または空の場合

i = 0
f = 0.0
st = ''
l = []
t = ()
d = {}
s = set()

print(bool(i))   # False 
print(bool(f))   # False
print(bool(st))  # False
print(bool(l))   # False
print(bool(t))   # False
print(bool(d))   # False
print(bool(s))   # False

0、または空でない場合

i = 16362427
f = 0.1
st = 'Hello'
l = [1, 2, 3]
t = ('a', 'b', 'c')
d = {'a': 1, 'b': 2, 'c': 3}
s = {9, 8, 7}

print(bool(i))   # True
print(bool(f))   # True
print(bool(st))  # True
print(bool(l))   # True
print(bool(t))   # True
print(bool(d))   # True
print(bool(s))   # True

配列のキャスト

リストやタプルもキャストすることができます。

リストに変換

リストに変換することで要素を追加・変更・削除することができる。

# タプル
t = (1, 2, 3)
print(t, list(t))

# セット
s = {1, 2, 3}
print(s, list(s))

# range
r = range(3)
print(r, list(r))

# ジェネレータ
g = (i for i in range(3))
print(g, list(g))

実行結果

(1, 2, 3) [1, 2, 3]
{1, 2, 3} [1, 2, 3]
range(0, 3) [0, 1, 2]
<generator object <genexpr> at 0x106b327b0> [0, 1, 2]

タプルに変換

タプルに変換することで要素の追加・変更・削除が行えない。また、リストよりも軽量化できる。

l = [1, 2, 3]
print(l, tuple(l))

実行結果

[1, 2, 3] (1, 2, 3)

セットに変換

セットに変換することで格納されている重複する要素を1つに絞ることができる。

l = [1, 2, 3, 1, 2, 3, 1, 2]
print(l, set(l))

実行結果

[1, 2, 3, 1, 2, 3, 1, 2] {1, 2, 3}

型変換できない場合

受け取った値は必ず型変換できるとは限りません。なので、型変換できなかった場合の処理が必要となります。

例えば、例外処理を使って以下のように記述します。

s = 'one'

# 例外処理
try:
    # エラーが起きそうな処理
    i = int(s)
except:
    # tryブロック内でエラーが起きた場合の処理
    print('型変換に失敗しました。')

実行結果

型変換に失敗しました。

無限ループと組み合わせることでinput関数で整数に変換できる値を受け取るまでループしたりできる。

# 無限ループ
while True:

    # 例外処理
    try:
        # input関数で受け取った値をintに変換
        i = int(input('整数: '))
        # エラーが発生しなければbreakが処理される
        break
    except:
        # tryブロック内でエラーが起きたら処理される
        print('整数を入力してください')

まとめ

この記事では、Pythonで型変換する方法を解説しました。

オブジェクトは使用したい型通りに取得できるとは限りません。なので、適宜キャストしてオブジェクトを使用できる型に変換する必要があります。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ