【初心者向け】データ型とは何か?

全体像

まずはじめに、Pythonにおけるデータ型の全体像を俯瞰しましょう。
この章では、下図の整数型、文字列型、リスト型、辞書型に絞って学びます。

変数と型

プログラミング言語によっては、変数を宣言する際に、「型宣言(この変数にはこの型を格納するよという宣言)」を行う必要がある言語があります。
例えば、他のプログラミング言語(Java言語やC言語など)は型宣言が必要になります。
ですが、Pythonの変数には型宣言が必要ないため、変数にどのような型でも入れることができます。

x = 5
print(x) # 5が出力される。
x = "Python" # 問題なく代入可能。
print(x) # Pythonと出力される。

データ型

これまでに、「文字列」や「数値」という値を見てきました。
これらは「データ型」と呼ばれ、様々な種類があります。
主なものは、整数型、文字列型、辞書型、リスト型になります。

数字(数値型)

1)整数(int)
2)小数・実数(float)
3)複素数
の3つあります。

文字列型

ダブルクォーテーション(”と”)またはシングルクォーテーション(‘と’)で囲うと文字列になります。
次のように、3種類の記述方法があります。

# 1) シングルクオテーション
str1 = 'Hello World'

# 2) ダブルクオテーション
str2 = "Hello World"

# 3) トリプル・ダブルクオテーション
str3 = """Hello World
Hello Python"""

Pythonでは文字列型を定義する上で、ダブルクォーテーション(”と”)とシングルクォーテーション(‘と’)の明確な使い分けはありませんので、どちらか好きな方を使って文字列型を定義して頂けたらと思います。

x = '1' # 文字列型

さらに、文字列型では+と*の2つを利用することが出来ますが、
+は文字列同士で使う場合、結合という意味になり、複数の文字列を1つの文字列として表現できます。
アスタリスク記号(*)を使うと文字列を反復することが出来ます。

実際にそれぞれ確認して見ましょう。

# 結合
a = "hello " # 結合後、見やすくするために、最後に半角スペースを入れています。
b = "world"
print(a + b) # hello world

次に、*を使う例です。

# 反復
a = "hello"
print(a * 3) # hellohellohello

型変換(キャスト)

下記のプログラムを記述して実際に、実行してみましょう。

print("Hello" + "World") # +により文字列同士を連結
name = "Tom"
print("My name is " + name)

age = 24
# 以下は、データ型の異なる文字列型と数値型を連結してエラーになっているプログラムです。

print("My name is " + name + "My age is " + age) # この行はエラーになります
# TypeError: Can't convert 'int' object to str implicitly

すると、TypeError: Can’t convert ‘int’ object to str implicitlyとエラーがでます。
このように、データ型の異なる文字列型と数値型を連結した場合エラーになってしまいます。
そこで、このエラーを回避するには、数値型を文字列型に変換することで、文字列同士の連結として扱われることになり、連結することができます。
このようにデータ型を変えることを「型変換」または「キャスト」と呼びます。
数値型を文字列型に変換するにはstr()を使います。

name = "Tom"
age = 24
print("My name is " + name + "My age is " + str(age))

"""
先ほど、数値型を文字列型に変換しましたが、反対に文字列型を数値型に変換することもできます。
その場合「int」を用います。
"""

string_price = "1000"
price = 500

total_price = int(string_price) + price
print(total_price) # 1500

リスト型

この節では、リスト型を説明していきます。
リスト型はデータ型の中でも、かなり大事な型になりますので、しっかりと扱えるようにしましょう。
さて、変数は、1つのデータしか管理できませんでしたが、リスト型は複数のデータ(変数)を管理できます。
他の言語では配列と呼ばれたりします。
Pythonのlistは、格納する型の定義は必要ありません。
複数のデータを管理したい場合にリストを用います。
listは配列名 = [“x”,”y”,”z”]という形式で宣言します。
リストの中身は左から数え始め、最初は1ではなく、0から数えるので注意です。
このリストの中身につけられた番号を添え字(そえじ)やインデックスなどと呼びます。

リストの追加

append()を使うことで、listの末尾に要素を追加することができます。

li = []
li.append("python)
print(li) # ['python']
li.append("php")
print(li) # ['python', 'php']

辞書型

辞書型(ディクショナリー型)はKeyとValueのペアを保持するデータ型です。

次は辞書型の構文になります。

辞書名 = {"キー" : "値", ・・・} 

リスト型はインデックス番号が0から始まり0から順に値が格納されていましたが、辞書型は{}を使い囲います。
その点は、辞書型と書き方は似ていますが、辞書型にはインデックス0から値が割り当てられていません。
そのため、リストはインデックス番号で値にアクセスできるのに対し、辞書型では任意のキー文字列で値にアクセスすることができます。

はじめに簡単なプログラムを見てみます。

profile = {"name": "tani", "email": "kazunori-t@cyberbra.in" }
print(profile["name"]) # tani

# 新しく要素を追加
profile["gender"] = "male"

# 新しく要素を追加した辞書型(profile)を出力
print(profile)

リスト型と辞書型の違い

ここまでリスト型と辞書型を学んできましたが、両者の違いは何でしょうか。
それは要素のアクセスの仕方が異なることです。
リスト型はインデックス(添え字)で要素にアクセスしましたが、辞書型はキー(文字列や数値)で要素にアクセスします。
また、リスト型は[]を使いますが、辞書型は{}を使う部分も異なります。

リスト型と辞書型の共通するところ

それでは両者が共通する部分はなんでしょうか。
共通する部分はリスト型も辞書型も、異なるデータ型(intやstr)などの要素を格納が可能であるという点です。
また、要素の書き換えが可能です。

まとめ

この章では、Pythonの様々なデータ型について見てきました。
リスト型や辞書型は、比較的次章で学習する制御構文などでよく利用することが多くなる型ですので、扱えるようにしておきましょう。

演習問題

1.2017年から2021年までの要素を持ったyears_listという名前のリストを作ってください。
2.years_listから今年の年を取り出して、printで出力してください。
3.years_listから2021年をprintで出力してください。
4.好きな文字列3つを要素にして、自由な変数名でリストを作ってください。
5.4で作った文字列3つを持つリストの末尾に新しく文字列を1つ追加してください。 ただし、普通に追加するのではなくある関数を使って末尾に追加してください。
6.名前と年齢のペアが3つある辞書型を作ってください。
(名前と年齢は自由につけてください)keyが名前で、valueが年齢とする

演習問題回答