今回はPythonのデータ型、特にPythonが標準で用意している「組み込みデータ型」を中心に、データ型を調べる関数、データ型の変換についてお話します。
組み込みデータ型の種類
まずは今までに扱ってきた基本的なデータ型のおさらいをしておきましょう。
データ型(type) | 略称 | 表記例 |
---|---|---|
文字列(string)型 | str | "string", ‘string’ |
整数(integer)型 | int | 123, -456, 0x78c |
浮動小数点数(floating point number)型 | float | 7.89, 0.12 |
複素数(Complex number)型 | complex | 3+4j, 50+6j |
ブーリアン(boolean)型/ブール型/真偽型 | bool | True, 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")-3 | 12 |
浮動小数点数 | float() | float("15")-3 | 12.0 |
2進数 | bin() | bin(50) | 0b110010 |
8進数 | oct() | oct(50) | 0b62 |
16進数 | hex() | hex(50) | 0x32 |
ブール型 | bool() | bool("テスト") | True |