前ページ(2-5:for・while文)| 目次へ戻る | 次ページ(2-7:関数)
ここまで文字や数字などを特に意識せずに使っていましたが、様々なデータ型というのが存在します。
データ型というのは「どういう種類のものなのか」を表すものであり、型が合っていないと変数への代入や計算式などエラーになります。
このページではその型について説明します。
例えば「1」という数字があった場合、これが「数字」なのか「文字」なのかで意味合いが違ってきます。
言語によっては変数を定義や代入する際に明示的に「型」を記述することがあるのですが、Pythonの言語仕様としては記述しない方式になっています。
Pythonでも明示的に型を書く方法もありますが「書くこともできる」という程度です。
なので、Pythonのソースコードを書く際にはこの型を気を付けながら記述しないと、意図しない動きやエラーになったりするので注意が必要です。
Pythonでは型を明示的に記述はしませんが、以下のようにtypeで型の確認ができます。
x = 1 # 数字
print(type(x))
# <class 'int'> # 結果
y= "1" # 文字
print(type(y))
# <class 'str'> # 結果
型の種類は様々ありますが、基本的なものは以下のようになります。
| 型名 | 内容 | 用途 | 例 |
|---|---|---|---|
| int | 整数(メモリの許す限りの上限) | 整数の数字 | -1, 0, 1, 2 |
| float | 浮動小数点数 | 小数の数字 | -1.1, 1.1234567 |
| str | 文字列 | 文字(「”」または「’」で囲む) | “a”, “あ”, “1234” |
| bool | 真偽値 | 真偽のどちらかしか値を取らないもの | True, False |
| list | リスト・配列 | 順番や連続しているデータ | [1, 2, 3], [‘a’, ‘b’, ‘c’] |
| dict | 辞書 | キーと値をセットのデータ | {‘key1’: 1, ‘key2’: 2, ‘key3’: 3} |
| tuple | タプル | 複数のデータをまとめたデータ | (1, 2, 3, 4, “a”) |
上記ぐらいを覚えていればPythonのコードを書く上でそこまで困らないとは思いますが、これで全てというわけではないので知らない型が出てきたら都度調べるようにしてください。
x = 1 # int
print(type(x)) # 型の確認
# <class 'int'> # 結果
整数の数字を扱うときに使用します。
また文字列の整数をint型にしたい場合は以下のようにします。
x = "1" # str
print(type(x)) # 型の確認
# <class 'str'> # 結果
y = int(x)
print(type(y)) # 型の確認
# <class 'int'> # 結果
x = 1.2345 # float
print(type(x)) # 型の確認
# <class 'float'> # 結果
小数の数字を扱うときに使用します。
Python(厳密にはPython3から)では割り算をした場合は、自動的にfloat型になります。
x = 10 / 2 # int同士の割り算
print(x) # 5.0と表示
print(type(x)) # 型の確認
# <class 'float'> # 結果
また文字列の小数をfloat型にしたい場合は以下のようにします。
x = "1.234" # str
print(type(x)) # 型の確認
# <class 'str'> # 結果
y = float(x)
print(type(y)) # 型の確認
# <class 'float'> # 結果
x = "1" # str
y = '234A' # こっちの書き方でもOK
print(type(x)) # 型の確認
print(type(y)) # 型の確認
# <class 'str'> # 結果
# <class 'str'> # 結果
ダブルクォーテーション「”」かシングルクォーテーション「’」で囲まれた部分が文字列になります。
また小数や整数の数字をstr型にしたい場合は以下のようにします。
x = 5 # int
y = 1.234 # float
print(type(x)) # 型の確認
print(type(y)) # 型の確認
# <class 'int'> # 結果
# <class 'ifloatnt'> # 結果
x_str = str(x)
y_str = str(y)
print(type(x_str)) # 型の確認
print(type(y_str)) # 型の確認
# <class 'str'> # 結果
# <class 'str'> # 結果
print(x_str + y_str) # 文字列同士の結合なので結果は「51.234」という文字になる
x = True # bool
y = False # bool
print(type(x)) # 型の確認
print(type(y)) # 型の確認
# <class 'bool'> # 結果
# <class 'bool'> # 結果
TrueまたはFalseのどちらかの値、真偽値のみの型です。基本的にフラグなどに使われます。
余談ですが、if文やwhile文などの条件式では、条件式の結果のTrue/Falseを判定しています。
x_list = ['a', 'b', 'c', 'd', 'e'] # list
print(type(x_list)) # 型の確認
# <class 'list'> # 結果
他言語の場合はリストと配列は別物になっていることが多いのですが、Pythonの場合は同じものとして扱われているのでリストのみの説明をします。
リストはただデータが入っているだけでなく、それぞれのデータに順番に0から「インデックス番号」がついています。
例えば以下のようなリストのインデックス番号はこのようになっています。
x_list = ['a', 'b', 'c', 'd', 'e'] # list
# インデックス番号と値の対応
# 0:'a'
# 1:'b'
# 2:'c'
# 3:'d'
# 4:'e'
リストの各値を取り出したり、値を代入することもできます。
x_list = ['a', 'b', 'c', 'd', 'e'] # list
print(x_list[3]) # x_listのインデックス3、つまり「d」が表示される
# d # 結果
x_list[2] = 'hoge' # x_listのインデックス2、つまり「c」を「hoge」に変更
print(x_list) # リストを表示
# ['a', 'b', 'hoge', 'd', 'e'] # 結果
リストの最後に要素を追加(append)したり、削除(pop)したり、リストのサイズを取得(len)することもできます。
x_list = [] # 空のリスト
x_list.append(1) # リストの最後に追加
x_list.append('a')
x_list.append(2)
print(x_list)
# [1, 'a', 2] # 結果
print(len(x_list)) # リストのサイズを取得して表示
# 3 # 結果
x_list.pop(1) # インデックス1の要素、つまり「a」を削除
print(x_list)
# [1, 2] # 結果
print(len(x_list)) # リストのサイズを取得して表示
# 2 # 結果
この他にもsortでのリストの並び替えなどありますが、詳しくはリファレンスなどを参照して各自で調べるようにしてください。
またfor文のところでも触れましたが、listの場合は以下のように書くことでリストの要素を一つずつ取り出すことができます。
num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for x in num_list:
print(x)
x_dict = {'key1': 1, 'key2': 2, 'key3': 3} # dict
print(type(x_dict)) # 型の確認
# <class 'dict'> # 結果
辞書はキーと値をセットのデータをまとめて持ちたい場合に使用します。
例えばクラスの「氏名とテスト点数」を1つのセットと考え、それをクラスの人数分持ちたい場合などです。
リストと同じようにキーを使って値を取得したり、変更することもできます。
# 氏名をキーとした点数の辞書
student_point_dict = {'sato': 80, 'sasaki': 69, 'suzuki': 39}
# sasakiというキーとセットになっている点数「69」を表示
print(student_point_dict['sasaki'])
# sasakiがキーとなっている値を変更
student_point_dict['sasaki'] = 21
# 変更された値が表示される
print(student_point_dict['sasaki'])
# 辞書を表示
print(student_point_dict)
# {'sato': 80, 'sasaki': 21, 'suzuki': 39} # 結果
辞書への追加や削除(pop)、サイズの取得(len)もできます。
# 氏名をキーとした点数の辞書
student_point_dict = {'sato': 80, 'sasaki': 69, 'suzuki': 39}
print(len(student_point_dict)) # サイズを取得して表示
# 3 # 結果
# 存在しないキーに値を代入で要素追加
student_point_dict['gotou'] = 45
print(student_point_dict)
# {'sato': 80, 'sasaki': 69, 'suzuki': 39, 'gotou': 45} # 結果
print(len(student_point_dict)) # サイズを取得して表示
# 4 # 結果
# キーを指定して要素を削除
student_point_dict.pop('sasaki')
print(student_point_dict)
# {'sato': 80, 'suzuki': 39, 'gotou': 45} # 結果
print(len(student_point_dict)) # サイズを取得して表示
# 3 # 結果
またfor文を使って辞書のキーと値を取得することもできます。
# 氏名をキーとした点数の辞書
student_point_dict = {'sato': 80, 'sasaki': 69, 'suzuki': 39}
for key, value in student_point_dict.items():
print("key:", key)
print("value:", value)
# 以下結果
# key: sato
# value: 80
# key: sasaki
# value: 69
# key: suzuki
# value: 39
x_tuple = ('1', 2, "aaa") # tuple
print(type(x_tuple)) # 型の確認
# <class 'tuple'> # 結果
tuple型は値が変更されることがないものをまとめておきたい場合に使用します。
リスト型と同じように各要素のインデックス番号から要素を取得できます。
x_tuple = ('1', 2, "aaa") # tuple
print(x_tuple[2]) # インデックス番号2、つまり「aaa」が表示される
ただし、タプルは「一度定義した要素を変更することができない」ため、リストと同じように要素を書き換えようとするとエラーになります。
x_tuple = ('1', 2, "aaa") # tuple
x_tuple[2] = 'bbb'
# 実行すると以下のエラーとなる
# Traceback (most recent call last):
# File "C:\Users\xxx.py", line 3, in <module>
# x_tuple[2] = 'bbb'
# TypeError: 'tuple' object does not support item assignment
なので繰り返しになりますが、tuple型を使う場合は、値が変更されることがないものをまとめておきたい場合に使用します。
以下のすべての条件を満たす処理をPythonで書いてみてください。
ちなみに計算結果が「48.666666666666664」となれば正解です。
# 辞書作成後にbをpopを使って削除させる方法もあるが、
# 今回の解答例では作成した辞書の内容を変えないよう
# 繰り返しの中で「b」を弾くようにしている。
key_list = ['a', 'b', 'c', 'd']
value_list = ['49', '52', '6', '91']
list_size = len(key_list) # 両方同じサイズなので片方のサイズを取得
point_dict = {} # 空の辞書
# リストのサイズ分繰り返して辞書を作成
for i in range(list_size):
point_dict[key_list[i]] = value_list[i]
print(point_dict) # 作成した辞書を表示
sum = 0 # 合計値の変数
count = 0 # 繰り返し回数の変数
for key, value in point_dict.items():
if key == 'b':
continue
sum = sum + int(value) # 点数がstrなのでintに変換して足す
count = count + 1
average = sum / count # 合計を繰り返し回数で割って平均を出す
print(average)