【Python基礎】リスト内の全ての数値に対して同じ値で足し算、引き算、掛け算、割り算する方法

  • URLをコピーしました!
目次

リスト内の要素への四則演算

前回、PythonのmatplotlibでX軸を上に、Y軸を右に表示する方法を紹介しました。

今回はリスト内の全ての数値に対して同じ値で足し算、引き算、掛け算、割り算する方法を紹介します。

それでは始めていきましょう。

正しく計算できない例

まずは正しく計算できない例です。

とりあえず数値のリストを作成し、それらに適当な数を四則演算してみます。

a = [1, 2, 3, 4, 5]

print(a+2)

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[1], line 3
      1 a = [1, 2, 3, 4, 5]
----> 3 print(a+2)
      4 print(a*2)

TypeError: can only concatenate list (not "int") to list
a = [1, 2, 3, 4, 5]

print(a-2)

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[2], line 3
      1 a = [1, 2, 3, 4, 5]
----> 3 print(a-2)

TypeError: unsupported operand type(s) for -: 'list' and 'int'
a = [1, 2, 3, 4, 5]

print(a*2)

実行結果
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
a = [1, 2, 3, 4, 5]

print(a/2)

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[4], line 3
      1 a = [1, 2, 3, 4, 5]
----> 3 print(a/2)

TypeError: unsupported operand type(s) for /: 'list' and 'int'

リストに対して単純に四則演算はできません。

ちなみにこの場合、こんな答えになるのを予想して計算しました。

a = [1, 2, 3, 4, 5]

print(a+2)

[3, 4, 5, 6, 7]

print(a-2)

[-1, 0, 1, 2, 3]

print(a*2)

[2, 4, 6, 8, 10]

print(a/2)

[0.5, 1, 1.5, 2, 2.5]

ということで、このような答えが得られる方法を紹介していきます。

numpyを使う方法

まずはnumpyを使う方法です。

numpyのリスト(ndarray)であれば、そのまま四則演算をすることができます。

import numpy as np

a = [1, 2, 3, 4, 5]

print(np.array(a)+2)
print(np.array(a)-2)
print(np.array(a)*2)
print(np.array(a)/2)

実行結果
[3 4 5 6 7]
[-1  0  1  2  3]
[ 2  4  6  8 10]
[0.5 1.  1.5 2.  2.5]

for文を使う方法

for文で要素を一つずつ取り出し、計算後に新たなリストに追加していく方法です。

a = [1, 2, 3, 4, 5]

b = []
for val in a:
    b.append(val+2)
    
c = []
for val in a:
    c.append(val-2)
    
d = []
for val in a:
    d.append(val*2)
    
e = []
for val in a:
    e.append(val/2)
    
print(b)
print(c)
print(d)
print(e)

実行結果
[3, 4, 5, 6, 7]
[-1, 0, 1, 2, 3]
[2, 4, 6, 8, 10]
[0.5, 1.0, 1.5, 2.0, 2.5]

初心者にとっては一番分かりやすいですが、プログラムの行数が増えてしまう書き方です。

リスト内包表記を使う方法

for文で簡単に書けたので、リスト内包表記でも書くことができます。

a = [1, 2, 3, 4, 5]

b = [val+2 for val in a]
c = [val-2 for val in a]
d = [val*2 for val in a]
e = [val/2 for val in a]

print(b)
print(c)
print(d)
print(e)

実行結果
[3, 4, 5, 6, 7]
[-1, 0, 1, 2, 3]
[2, 4, 6, 8, 10]
[0.5, 1.0, 1.5, 2.0, 2.5]

def文を使う方法

def文を使って目的の計算を関数としてしまう方法です。

この場合def文で目的の計算を定義したのち、map関数を使うとリストの要素を全て一度に計算することができます。

a = [1, 2, 3, 4, 5]

def plus(val):
    return val+2

def minus(val):
    return val-2

def times(val):
    return val*2

def divide(val):
    return val/2

b = map(plus, a)
c = map(minus, a)
d = map(times, a)
e = map(divide, a)

print(list(b))
print(list(c))
print(list(d))
print(list(e))

実行結果
[3, 4, 5, 6, 7]
[-1, 0, 1, 2, 3]
[2, 4, 6, 8, 10]
[0.5, 1.0, 1.5, 2.0, 2.5]

表示する際、リストに変換することをお忘れなく。

lambda式を使う方法

def文とmap関数を使えるのなら、lambda式を使うのも簡潔に書ける良い方法です。

a = [1, 2, 3, 4, 5]

b = map(lambda val: val+2, a)
c = map(lambda val: val-2, a)
d = map(lambda val: val*2, a)
e = map(lambda val: val/2, a)

print(list(b))
print(list(c))
print(list(d))
print(list(e))

実行結果
[3, 4, 5, 6, 7]
[-1, 0, 1, 2, 3]
[2, 4, 6, 8, 10]
[0.5, 1.0, 1.5, 2.0, 2.5]

次回は二つのリストで同じインデックスの要素を足し算、引き算、掛け算、割り算する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次