[Python入門]#04 組み込みデータ型、型を調べる/変換する関数

今回はPythonのデータ型、特にPythonが標準で用意している「組み込みデータ型」を中心に、データ型を調べる関数、データ型の変換についてお話します。

組み込みデータ型の種類

まずは今までに扱ってきた基本的なデータ型のおさらいをしておきましょう。

データ型(type)略称表記例
文字列(string)型str"string", ‘string’
整数(integer)型int123, -456, 0x78c
浮動小数点数(floating point number)型float7.89, 0.12
複素数(Complex number)型complex3+4j, 50+6j
ブーリアン(boolean)型/ブール型/真偽型boolTrue, False

これらは全てPythonが標準で用意している「組み込みデータ型」と呼ばれるものです。

表記例を見れば分かると思いますが、これらのデータ型は全て表記の仕方によって、何のデータ型なのかをPythonが自動的に判断しています。

そのため表記さえ間違えなければ、ユーザーは何も考えなくても50+10は60、"50"+"10"は"5010"と正しい答えが導かれます。

この中でちょっと特殊なのはbool型でしょうか。この型は「True」か「False」かの2つの値しか存在しません。要は「あるかないか」、「同じであるか違っているか」、「真か偽か」のみを表現する型です。

「"True"」というstr型は存在しますが、「True」はbool型にしか存在しません。

複数の値を内包する組み込みデータ型

もう少し組み込みデータ型の種類を挙げておきましょう。

上の例で出てきたデータ型は「"string"」や「123」など、1つのまとまりで1つの「値」として扱われており、「"string", "int"」や「123,456」のようにカンマで区切られた2つの値は、1行で記述したとしてもあくまで別々の2つの値になります。

しかしプログラミングでは往々にして、「複数の値をまとめた1つの値」が欲しい場合があります。例えばこんな形。

「白石麻衣,27,8/20」

このような複数の値を1つにまとめて管理したい場合、次のような組み込みデータ型を使用します。

データ型(type)略称表記例
リスト(list)型list["白石麻衣", 27, "8/20"]
辞書(dictionary)型dict{"氏名":"白石麻衣", "年齢":27, "誕生日":"8/20"}
タプル(tuple)型tuple("白石麻衣", 27, "8/20")
セット(set)型set{"白石麻衣", 27, "8/20"}

これらはコンテナ型、あるいは複合型と呼ばれ、複数の値をまとめて1つの値として管理できるデータ型です。

ここでは詳しく触れませんが、表記例を見てみると角括弧や波括弧、丸括弧で複数の値が囲まれていることが分かります。ここに挙げたものも全て組み込みデータ型であり、表記によって何の型なのかが自動的に判断されます。

値の型を調べる

今の変数の型は?

「組み込みデータ型は表記によって、何のデータ型なのかが判別される」というのは、あくまで「Pythonには判別できる」のであって、人間にはこの判別が難しい場合があります。

例えば変数を使用している場合です。

import random

list = ["1.0",1.0]
x = random.randint(0,1)
print(list[x])        #1.0

上のコードの処理は今のところは深く解説しませんが単純です。listという変数に入っている2つの「1.0」のうち、どちらかがランダムに選ばれて出力されます。

最終的に出てくる値はどちらにしても見た目は1.0ですが、この値は文字列か小数か、果たしてどちらでしょうか。

type関数を使ってみる

この問題を解決するには関数を使うのが手っ取り早いでしょう。「関数とは?」については次回お送りしたいと思いますが、まずは1つ使ってみましょう。

上のコードに以下の1行を付け足します。

print(type(list[x]))

その状態でもう一度コードを実行してみましょう。

するとターミナルには「1.0」の下の行に<class ‘str’>という文字が現れました。

「指定された値の型はstr(文字列)型である」というPythonからの返答です。もし小数であった場合は<class ‘float’>と表示されます。

これはtype関数と呼ばれる関数です。関数名の後に続く丸括弧()の中に調べたい値を入れれば、その値のデータ型を教えてくれます。

そのままではターミナル上に出力できないので、出力したい場合はprint()の丸括弧の中に丸ごと入れてあげましょう。

isinstance関数を使ってみる

値の型を調べるには他にもisinstance関数があります。使用方法はtype関数と似ていますが、若干違いがあります。こちらも例を見ていきましょう。

print(isinstance(list[x],str))     #True

先ほどと比べてみると名前が変わった他に、()の中身が1つ増えているのが分かるかと思います。「,str」の部分です。

type関数とisinstance関数はどちらもPythonに対して、ある値の型を尋ねる関数です。しかしその「尋ね方」には大きな違いがあります。

ご覧のようにtype関数は「このデータ型は何?」と尋ねているのに対し、isinstance関数は「これはこの型だよね?」と確認しています。それに対する答えはもちろん「True(そうだよ)」か「False(違うよ)」のどちらかです。

これに限らず「is〇〇」関数はこのような確認をする関数なので、覚えておくと後々楽になるかもしれません。

値の型を変換する

最後に値の型を変換する方法です。

文字列と数値を連結したい場合や、逆に文字列と数値の四則演算など、使用する場面も多いかと思います。

こちらも先ほどと同じように関数によって実現できます。非常に簡単ですので、ここでは表にまとめる程度にしておきます。ご自身で試してみてください。

変換先の型関数使用例結果
文字列str()"年齢は"+str(88)"年齢は88"
整数int()int("15")-312
浮動小数点数float()float("15")-312.0
2進数bin()bin(50)0b110010
8進数oct()oct(50)0b62
16進数hex()hex(50)0x32
ブール型bool()bool("テスト")True
タイトルとURLをコピーしました