2016年10月28日金曜日

pythonでリストの各要素の四則演算をする

以下のリスト内にある全ての要素を掛け算する(足し算でも引き算でもいい)方法をメモります。
言語はpython3です。

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

使うモジュール


実行結果


では、実際にnumsの積を求めてみる。
operatorモジュールからmul関数をインポートする。
functoolsモジュールからreduce関数をインポートする。
reduce関数は関数とイテラブルを引数にとって、イテラブルの要素に対して、左から右に累積的に関数を適用する。

from operator import mul
from functools import reduce

nums = [1,2,3,4,5]
print(reduce(mul, nums)) #結果=>120

関数を作ってみる


次に、任意の数だけ引数を与えて、その積を返してくれる関数を作ってみます。

from operator import mul
from functools import reduce

def mul_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(mul, nums)

mul_num(1,2,3,4,5)  #結果=>120

もちろん足し算、引き算、割り算もできる。

足し算

from operator import add
from functools import reduce

def add_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(add, nums)

add_num(1,2,3,4,5)  #結果=>15

引き算

from operator import sub
from functools import reduce

def sub_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(sub, nums)

sub_num(1,2,3,4,5)  #結果=>-13

割り算

from operator import truediv
from functools import reduce

def div_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(truediv, nums)

div_num(1,2,3,4,5)  #結果=>0.008333333333333333

無名関数

ちなみにlambdaを使うと一行でいける。

from operator import add, mul, sub,truediv, floordiv
from functools import reduce

reduce(lambda x, y: x*y, [1, 2, 3, 4, 5])   #結果=>120