Pythonの覚えておきたいデータ型
出力する関数print、リスト、繰り返し関数for、条件分岐の関数ifを解説したところで、そろそろ「データ型」に関しても説明したいと思います。
こういった関数を学ぶと、やってみたくなるのが、数字や文字がごちゃまぜになったらどうなるだろうということではないでしょうか?
例えばfor文を使って、数字と文字を交互に出そう!なんてことを試してみた人もいるんではないでしょうか?
mix_list = [1, "a", 2, "b", 3, "c"]
for i in mix_list:
print(i)
実行結果
1
a
2
b
3
c
綺麗に出力されていますが、あまりこの例は好ましくない例です。
それは1つのリストに異なる型の要素が混在しているからです。
まずこのような文字とか数字が所属する型のことを「データ型」といいます。
Pythonでまず最初に覚えておいたほうがよいデータ型は「文字列」、「整数」、「少数」です。
(文字は単に文字ではなく、連なったものとして、「文字列」となっています)
ですので分類としては、こんな感じになると”思いがち”です。
ですが、私がプログラミングしている時の文字や数字はこんな感じの分類で考えています。
文字と数字は別のものではなく、文字列の一部に数字がある、そしてその中に整数と少数があるという理解です。
何故かというと、Python(多分他のプログラミング言語でも)では、計算できない文字としての数字と、計算可能な数字があるからです。
四則演算に関しては、この後説明しますが、ちょっと1つだけ、足し算をしてみましょう。
a = 1 + 1
print(a)
実行結果
2
数字の足し算は簡単で、数字を + で繋げてあげればできます。
上記の例は、1 + 1をして変数aに代入し、printで出力しています。
1 + 1 はもちろん 2 なので、実行結果は 2 になっていますね。
では文字としての数字に変えてみます。
文字列の場合は、その文字をダブルクオーテーション(シングルクオーテーションでも可)で囲ってあげます。
a = "1" + "1"
print(a)
実行結果
11
1 + 1は 2 なのに、11になってしまいました。
これは2つの1が文字列なので「1という文字と1という文字を繋げてくれ」という指示に変わったため、11になってしまったのです。
もちろん普通の文字列同士でもこの文字列の連結は可能です。
a = "x" + "y"
print(a)
実行結果
xy
こんな感じで計算できない文字としての数字と計算可能な数字があるということです。
では、この2つを混在させるとどうなるでしょうか?
計算可能な数字と計算できない文字としての数字を足してみます。
a = 1 + "1"
print(a)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = 1 + "1"
2
3 print(a)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
はい、エラーがでました。
異なるデータ型では、どういう処理をしていいのかわからなくなるので、エラーとなるわけです。
そのため、最初の例で mix_list = [1, “a”, 2, “b”, 3, “c”] と1つのリストに異なるデータ型が混在するのは、好ましくないわけです。
Python(多分他のプログラミング言語でも?)では、計算できない文字としての数字を含む全ての文字のデータ型をstr型(String)と言います。
計算可能な数字は、先ほど紹介した通り、整数型と少数型があり、それぞれint型(integer)とfloat型と名前がつけられています。
まとめてみるとこんな感じです。
型の変換
いくら型が決まっているといっても、文字としての数字を計算に用いたい時もあるでしょうし、整数や小数を文字として扱いたい時もあるでしょう。
その時には型を変換する必要があります。
まずは文字としての数字を計算可能な整数に変換してみましょう。
a = int("1") + int("1")
print(a)
実行結果
2
先ほど、”1″ + “1” は 11 でしたが、int()で囲ってあげることにより、int型に変換することができます。
今までfloat型が出てきていなかったので、float型にしてみます。
a = float("1") + float("1")
print(a)
実行結果
2.0
こちらもfloat()で囲ってあげるだけです。
小数であるfloat型にしたので、小数第一位まで表示されるようになりました。
もちろんint型をfloat型にすることもできます。
a = float(1) + float(1)
print(a)
実行結果
2.0
先ほど、1 + 1は 2 となったのですが、今回は2.0と表示され、int型がfloat型担っていることが分かります。
逆に文字であるstr型にしてみましょう。
a = str(1) + str(1)
print(a)
実行結果
11
これも1 + 1は 2 ですが、11 と表示され、文字として2つの 1 が連結されていることが分かります。
ちなみに数字でない文字をint型やfloat型にできるのでしょうか?
a = int("a") + int("b")
print(a)
実行結果
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = int("a") + int("b")
2
3 print(a)
ValueError: invalid literal for int() with base 10: 'a'
a という数字はないので、エラーが表示されました。
ここまでまとめてみるとこんな感じになります。
数字(int、float)の四則演算
先ほど少し紹介しましたが、intやfloatでは普通の計算が可能です。
足し算(int型)
a = 1 + 1
print(a)
実行結果
2
足し算(float型)
a = 1.0 + 1.0
print(a)
実行結果
2.0
ちなみに計算にint型とfloat型が混ざっている場合でも、計算は可能です。
その場合は、float型に自動で合わせてくれます。
a = 1 + 1.5
print(a)
実行結果
2.5
ということでこれ以降は、小数の結果も出てくるので、float型で紹介していきます。
引き算
a = 1.5 - 1.0
print(a)
実行結果
0.5
引き算の場合、計算結果がマイナスになることもありますが、ちゃんと表示してくれます。
a = 1.5 - 1.0
print(a)
実行結果
-0.5
掛け算
a = 1.8 * 1.5
print(a)
実行結果
2.7
割り算
a = 1.5 / 0.5
print(a)
実行結果
3.0
ということで、int型、float型の計算に関してはだいたい大丈夫だと思います。
float型での桁数
float型を使い始めると、困るのが小数点第何位まで含めるのかということです。
その際にはroundという関数があり、好きな桁数で区切ることができます。
例えば割り切れない割り算をやってみるとこうなります。
a = 2 / 3
print(a)
実行結果
0.6666666666666666
時にはこんな小数点第16位までいらないということがあるでしょう。
例えば、小数点第5位まででいい時はこうします。
a = round(2 / 3, 5)
print(a)
実行結果
0.66667
round(X , Y)とすると、Xの数を小数点第Y位まで表示します。
その際、さらに一桁下の数を丸めるのですが、これは正確には四捨五入ではありませんので注意してください。
ただ、ほぼ四捨五入と同じ動きをするため、私自身は気にしていません。
以下のページが詳しいので、より正確に数値を扱いたい方はご覧になってくださいな。
先ほどの場合は、小数点第6位を丸め、小数点第5位までを a に代入し、表示しています。
ただ計算には正確な値を使い、表示には簡易的に小数点を丸めた数が欲しい場合もあります。
その際には、print関数で表示するところで、round関数を使います。
a = 2 / 3
print(round(a, 5))
実行結果
0.66667
小数を使う時に、round関数は活躍してくれるので、ぜひ覚えておいてください。
文字(str)の四則演算
先ほどちらっと紹介しましたが、文字であるstr型では四則演算のうち、足し算だけ行うことができます。
a = "x" + "y"
print(a)
実行結果
xy
ただ文字の足し算は、文字と文字を繋げるために使われ、「連結」と言われます。
この文字の連結は、printでの出力を見やすくしたり、ファイルのパスとファイル名を繋げたり、新たにファイル名を作ったりと結構細々と活躍しますので、文字は + で連結できることは覚えておくといいでしょう。
例えばprintでの出力の際に、こんな風にデコレーションしたりできます。
a = "x" + "y"
print("答えは" + a)
実行結果
答えはxy
引き算、掛け算、割り算に関してはエラーが出てしまいます。
a = "x" - "y"
print(a)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = "x" - "y"
2
3 print(a)
TypeError: unsupported operand type(s) for -: 'str' and 'str'
a = "x" * "y"
print(a)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = "x" * "y"
2
3 print(a)
TypeError: can't multiply sequence by non-int of type 'str'
a = "x" / "y"
print(a)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 a = "x" / "y"
2
3 print(a)
TypeError: unsupported operand type(s) for /: 'str' and 'str'
型や四則演算に関しては、こんな感じでしょうか。
次回はCSVファイル、TSVファイルの説明と、それらのファイルの読み込み方法を解説していきます。
ということで今回はこんな感じで。
コメント