Pythonは整数、浮動小数点、複素数の3種類それぞれ異なる型同士の算術演算に対応しています。今回は、四則演算(足し算、引き算、割り算、掛け算)の基本と併せてこれら型混合時の演算の基本についてまとめます。
# 2020/3/23 記事更新
確認した環境
- OS: Ubuntu16.04LTS
- Python3.7.4
符号の反転 \(-x\) / \(+x\)
符号(+、-)を反転します。戻り値の精度は入力xと同じです。
表記 | 入力 | 戻り値 | |
---|---|---|---|
符号反転 | -x | int/float/complex | 入力と同じ |
符号そのまま | +x | int/float/complex | 入力と同じ |
以下に具体例を示します。
# 整数
>>> x = 2
>>> -x
-2
>>> +x
2
# 浮動小数点
>>> x = 1.23
>>> -x
-1.23
>>> +x
1.23
# 複素数
>>> x = 1+2j
>>> -x
(-1-2j)
>>> +x
(1+2j)
足し算(加算) \(x + y\)
+演算子を使います。
コード表記 | 入力(被演算子)の型 | 戻り値の型 | |
---|---|---|---|
2値の足し算 | x + y | int/float/complex | “より広い方”の型に合わせる |
インクリメント | x += n (n: 数値型) | int/float/complex | “より広い方”の型に合わせる |
計算する数値(被演算子)の型が互いに異なる場合は、 “より狭い方”の型の数値は他方の型に合わせて広げられます。ここで、”より狭い”型は下記のように表せます。
(狭い) 整数型 < 浮動小数点型 < 複素数 (広い)
例えば、こんな感じです。
- a(整数型)+ b(浮動小数点型)の場合:
- a(浮動小数点型)+ b(複素数)の場合:
aが整数型→浮動小数点型に広げられ、演算結果は浮動小数点型が返る。
aが浮動小数点型→複素数型に広げられ、演算結果は複素数型が返る。
例を以下に記載します。
# 整数 + 整数 → 整数
>>> 1 + 2
3
# 整数 + 浮動小数点 → 浮動小数点
>>> 1 + 1.23
2.23
# 整数 + 複素数 → 複素数
>>> 1 + 2+3j
(3+3j)
# 浮動小数点 + 複素数 → 複素数
>>> 1.23 + 2+3j
(3.23+3j)
尚、+演算子は数値型だけでなくシーケンス型やCounterオブジェクトも適用できます。
# str型(文字列)
>>> '1' + '2'
'12'
# リスト
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
# タプル
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
# 辞書は使えない
>>> {1:2} + {3:4}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
# Counterオブジェクト
>>> import collections
>>> a = collections.Counter(a=2, b=3) # Counter({'b': 3, 'a': 2})
>>> b = collections.Counter(a=3, b=4) # Counter({'b': 4, 'a': 3})
>>> a + b
Counter({'b': 7, 'a': 5})
リストの足し算は、尚、行列やベクトルの和のような各要素ごとの加算にはならないので注意です。
このような演算をする場合は、numpyモジュールを使うと便利です(別途まとめる予定)。
>>> import numpy as np
>>> a = np.array([1, 2]) # array([1, 2])
>>> b = np.array([3, 4]) # array([3, 4])
>>> a + b
array([4, 6])
引き算(減算) \(x – y\)
-演算子を使います。
戻り値の型は足し算同様に、より “制限された” 型の数値は他方の型に合わせて広げられます。
コード表記 | 入力(被演算子)の型 | 戻り値の型 | |
---|---|---|---|
2値の引き算 | x – y | int/float/complex | “より広い方”の型に合わせる |
デクリメント | x -= n (n: 数値型) | int/float/complex | “より広い方”の型に合わせる |
例を以下に記載します。
# 整数 - 整数
>>> 2 - 1
1
# 整数 - 浮動小数点
>>> 2 - 1.23
0.77
# 整数 - 複素数
>>> 2 - 1+3j
(1+3j)
# 浮動小数点 - 複素数
>>> 1.23 - 2+3j
(-0.77+3j)
尚、-演算子は+演算子と異なりシーケンス型では使えません。Counterオブジェクトでは使えます。
# Counterオブジェクト
>>> a = collections.Counter(a=5, b=4) # Counter({'a': 5, 'b': 4})
>>> b = collections.Counter(a=2, b=3) # Counter({'b': 3, 'a': 2})
>>> a - b
Counter({'a': 3, 'b': 1})
掛け算(乗算) \(x * y\)
*演算子を使います。
戻り値の精度は、足し算・引き算と同様に、より “制限された” 型の数値は他方の型に合わせて広げられます。
コード表記 | 入力(被演算子)の型 | 戻り値の型 | |
---|---|---|---|
2値の掛け算 | x * y | int/float/complex | “より広い方”の型に合わせる |
インクリメント | x *= n (n: 数値型) | int/float/complex | “より広い方”の型に合わせる |
例を以下に記載します。
# 整数 * 整数
>>> 1 * 2
2
# 整数 * 浮動小数点
>>> 1 * 2.34
2.34
# 整数 * 複素数
>>> 2 * (2+3j)
(4+6j)
# 浮動小数点 * 複素数
>>> 1.23 * (2+3j)
(2.46+3.69j)
割り算(除算の商、剰余) \(x / y\)
割り算の商
/演算子、または//演算子を使います。違いは、
- /演算子:浮動小数点を返す
- //演算子:小数点以下切り捨ての整数値を返す(型は整数型とは限らない)
以下に例を示します。
# 整数型
>>> 11 / 7
1.5714285714285714
>>> 11 // 7
1
# 浮動小数点型
>>> 11.4 / 7
1.6285714285714286
>>> 11.4 // 7
1.0
# 複素数型
>>> (2+3J) / 3
(0.6666666666666666+1j)
# 複素数型で//演算子は使えません
>>> (1+2j) / 3
(0.3333333333333333+0.6666666666666666j)
>>> (1+2j) // 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't take floor of complex number.
剰余(余り)
余りは%演算子を使います。
# 整数型
>>> 11 % 7
4
# 浮動小数点型
>>> 11.3 % 7
4.300000000000001
また、divmod(a, b)を使うと、商と余りを同時に求めることも出来ます。
# 整数型
>>> divmod(11, 7)
(1, 4)
# 浮動小数点型
>>> divmod(11.3, 7)
(1.0, 4.300000000000001)
まとめ
今回は、Pythonにおける演算の基本である四則演算(足し算、引き算、掛け算、割り算)についてまとめました。
[Python] 割り算の商と余りの求め方