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