【Python入門・応用】05.データ型|変数に入れるデータの種類と特徴、確認の方法を覚えよう

Python入門・応用05データ型サムネイル
Python入門・応用講座

こんにちは。キノコードです。
この動画では、Pythonのデータ型について説明します。
説明する内容は、こちらです。
後ほど詳しく説明しますが、Pythonでのデータ型は、宣言をしなくても自動的にデータ型を判断してくれます。
ではなぜ、データ型についての理解が必要なのでしょうか?
理由は、同じように見えてもデータ型が原因でエラーが起こることもあるからです。
このレッスンでは、Pythonにはどのようなデータ型があるのか、それぞれどのような特徴があるのかを学びます。
あわせて、データ型の確認の仕方も覚えましょう。

この記事の執筆・監修

キノコード
キノコード

テクノロジーアンドデザインカンパニー合同会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
著書「あなたの仕事が一瞬で片付くPythonによる自動化仕事術」や、雑誌「日経ソフトウエア」や「シェルスクリプトマガジン」への寄稿など実績多数。

データ型とは

データ型とは、変数に入れるデータの種類のことです。
Pythonの主なデータ型には、数値型、文字列型、ブール型、リスト型、タプル型、辞書型、set型があります。
ちなみに、Pythonでは、変数にデータを入れるときに、データ型を指定する必要がありません。
Pythonが自動的にデータ型を判断してくれるからです。
このようなプログラミング言語のことを動的型付け言語と言います。
動的型付け言語には、Python、Ruby、PHP、JavaScriptなどがあります。
対して、変数にデータを入れる時にデータ型を指定する言語のことを、静的型付け言語と言います。
静的型付け言語には、C言語、Java、Kotlin、Go言語などがあります。

数値型

それでは、まず最初に、数値型について説明します。
数値型には、整数の「int型」、小数の「float型」があります。
Pythonのプログラムを書いて、見ていきましょう。

num01 = 123
num02 = 1.23

print(num01)
print(num02)

num01には、整数の123を代入し、
num02には、小数の1.23を代入します。
実行してみましょう。
123と1.23が表示されました。

num01 = 123
num02 = 1.23

print(type(num01))
print(type(num02))

Pythonのデータ型は、type(タイプ)関数を使用して確認する事ができます。
typeの丸括弧の中にnum01とnum02を入れて、それらをprintでくくりましょう。
実行してみます。
「int」と「float」が表示されました。

文字列型

string_a = 'Hello,World!'

print(string_a)
print(type(string_a))

次に、文字列型について説明します。
文字列型は「string型」とも言います。
string_aという変数を作って、そこに文字列を代入してみましょう。
文字列はシングルクォーテーション、またはダブルクォーテーションでくくります。
今回はシングルクォーテーションで「Hello,World!」の文字列をくくります。
string_aの中身を表示させ、あわせて、データの種類を表示させてみましょう。
実行します。
「Hello,World!」と 「str」が表示されました。

ブール型

次に、ブール型について説明します。
ブール型は、Boolean型(ブーリアン型)とも言います。
ブール型は、True(真)またはFalse(偽)の2つのうち、どちらか1つを持つデータ型です。
TrueとFalseとは何でしょうか?
例えば、10と1では10の方が大きいです。
つまり、「10 > 1」は真です。
これを変数に代入するとTrueが入ります。
逆に「10 < 1」は偽です。これを変数に代入すると、Falseが入ります。
コードを書いて見ていきましょう。

a = 10
b = 1

bool01 = (a > b)
print(bool01)
print(type(bool01))

aという変数に10を代入し、bという変数に1を代入しましょう。
a > bは真です。
結果をbool01に代入してみましょう。
Trueが代入されているはずです。
bool01のデータ型も確認してみましょう。
実行してみます。
「True」とブール型である「bool」が表示されました。

a = 10
b = 1

bool02 = (a < b)
print(bool02)
print(type(bool02))

不等号の向きを逆にすると偽なので、Falseが代入されているはずです。
実行してみましょう。
「False」とブール型である「bool」が表示されました。

リスト型

a = [1, 2, 3, 'list']

print(type(a))

リスト型は複数の要素を格納できるデータ型です。
リストは配列のようなデータ型で、数値、文字列、またリストそのものを入れておくことができます。
それらを混ぜて代入することもできます。
リストは順番を付けて管理します。この順番のことをインデックスと言います。
リストを定義するには、角括弧に要素をカンマで区切って代入します。

aという変数にリストを代入し、データ型を確認してみましょう。

実行します。
リスト型の「list」が表示されました。

tuple型

b = (1, 2, 3, 'tuple')

print(type(b))

tuple型はリスト型によく似たデータ型です。
リストと同じように、様々な種類の要素を代入することができ、インデックスを付けて管理することができます。
リストとの違いは、一度代入した要素を後から書き換えることができないというところです。
また、一度作ったタプルは、要素を追加したり、削除したりすることはできません。
タプル自体を書き換えるという操作を行うことができないようになっているのです。
タプルを定義するには、丸括弧内に要素をカンマで区切って代入します。
bという変数にタプルを代入し、データ型を確認してみましょう。

実行します。
タプル型の「tuple」が表示されました。

辞書型

z = {'a': 1, 'b': 2, 'c': 3, 'd': 'dict'}

print(type(z))

次に辞書型をみていきましょう。辞書型(ディクショナリ)もリスト同様、1つの変数で複数の要素を管理できるデータ型です。
リストでは要素をインデックスで管理していましたが、辞書では見出し語となる「キー」で要素を管理します。
つまり、辞書ではキーと対応する値(バリュー)をペアで管理するのです。
なお、数値や文字列はキーとして利用できますが、リストは内容が変更される可能性があるためキーとして利用することができません。
辞書を定義するには、波括弧内にキーとキーに対応するバリューをコロンで並べ、複数の要素はカンマで区切って代入します。

keyやvalueが文字列の場合は、シングルクォーテーション、もしくはダブルコーテーションで囲むことを忘れないようにしましょう。
zという変数に辞書を代入し、データ型を確認してみましょう。

実行します。
辞書型の「dict」が表示されました。

set型

s1 = {1, 2, 3}
s2 = {1, 2, 3, 1, 2, 3}

print(s1)
print(s2)
print(type(s1))
print(type(s2))

set型では集合を扱います。
set型もリストのように複数の要素を管理できるデータ型です。
要素を追加したり削除したりすることが可能なほか、和集合、積集合、差集合などの集合演算を行うことができます。
リストとの大きな違いは、重複した要素がないことと、要素に順番がないことです。
set型を定義するには、波括弧内に要素をカンマで区切って代入します。

実行します。
{1, 2, 3}、{1, 2, 3}、set型のsetが表示されました。

ちなみに、重複した要素を入力した場合、出力されるときには重複した要素は無視されます。

データ型

各データ型には、それぞれ固有の機能が備わっています。
この固有の機能のことをメソッドといいます。
データ型によって呼び出せるメソッドが異なり、数値型で使えるメソッドを、文字列型で同じように呼び出して使用することはできません。
各データ型が持つメソッドについては、別の動画で詳しく触れていきます。

データ型の変換

Pythonでは、データ型をお互いに変換するための組み込み関数がいくつか用意されています。
順番に見ていきましょう。

a = (1, 2, 3, 'tuple')
b = list(a)
print(a)
print(type(a))
print(b)
print(type(b))

リスト関数を使うと、他のデータ型をリストに変換することができます。
例えば、タプルが代入されたaという変数をリストに変換したい場合、丸括弧内に変数aを入力すると、タプルをリストに変換することができます。

実行します。
タプルをリストに変換することができました。

同じようにtuple関数を使うと他のデータ型をタプルに変換することができます。
リスト関数やtuple関数は、文字列型を変換対象にすると、1文字ずつが要素のリストやタプルに変換されます。

a = '1234'
b = int(a)
print(a)
print(type(a))
print(b)
print(type(b))

int関数を使うと他のデータ型を数値に変換することができます。
例えば、文字列が代入されたaという変数を数値に変換したい場合、丸括弧内にaを入力すると、文字列を数値に変換することができます。

実行します。

文字列を数値に変換することができました。
ちなみに、小数点を含む文字列を数値に変換する場合は、int()ではなくfloat()を使います。
また同じように、str()を使うと他のデータ型を文字列に変換することができます。

a = 123
b = '123'

c = a + 456
d = b + '456'

print(c)
print(type(c))
print(d)
print(type(d))

データの四則演算

Pythonでは、数値や文字列を使って計算を行うことができます。
数値同士では、「+」「-」「」「/」を使った四則演算ができます。
文字列同士では、「+」を使って複数の文字列を連結することができます。
また、「
」を使うと、文字列を繰り返すことができます。
「+」を使って確認してみましょう。

実行します。

数値同士の計算では、単純に123+456の計算となり、数値の579という結果が返されます。
対して、文字列同士の計算では、文字列の中身が数値であったとしても順番に並んだ文字列として処理します。
そのため、文字列の'123456'という結果が返されます。

a = 123

b = a + '456'

print(b)

それでは、数値と文字列をプラスを使って足すことはできるのでしょうか。
確認してみましょう。

実行します。

エラーが返ってきました。
Pythonでは異なるデータ型での計算はできません。
先ほどの例で言えば、数値での足し算をするべきなのか、文字列同士での連結をするべきなのかは、プログラムを書いた人がどんな処理をさせたいかによって異なるからです。

a = 123

b = str(a) + '456'

print(b)

そこで、データ型が異なる場合、先ほど解説をしたデータ型の変換を使って型を揃えます。
そうすることで、より明確にどのような処理をしたいのかをPythonに伝えることができます。
先程の例を使って、文字列に変換して結合してみましょう。
数値が代入されたaという変数を、前述したstr()を使って文字列に変換します。

実行します。

文字列同士の連結ができました。