色々な方法でリストの総和を求める

はじめに

今回はPythonでリストの総和を求める

なに?組み込み関数のsum()を使えば良いって?

確かにそうだが、せっかくなので勉強のために自前で実装してみよう

実装

準備

以下のようなリストを考える。今回はこの総和を求めたい。

1
A = [2, 3, 5]

組み込み関数sum

これが正しい方法

1
sum(A)

方法1. for文

これが最も愚直な方法。

sumが存在しない言語であればこれが良い実装だろう。

1
2
3
4
5
6
def my_sum1(lst):
sm = 0
for e in lst:
sm += e
return sm
my_sum1(A)

方法2. reduce

かなり無駄な感じがしてきた。

高階関数reduceと自作の足し算をする関数addを使う。

reduceは第一引数に関数、第二引数にリストを与えることで、

リストに対して、関数の処理を繰り返して適用することができる。

1
2
3
4
5
from functools import reduce
def my_sum2(lst):
def add(a, b):
return a+b
return reduce(add, lst)

方法3. reduce + lambda

勝手に実装にしておいて何だが、わざわざ関数addを宣言したくない。

そんな時はlambdaの出番だ。

1
2
3
from functools import reduce
def my_sum3(lst):
return reduce(lambda a, b: a+b, lst)

方法4. 再帰

再帰を使っても表現が可能だ。

先頭の要素と、残りの要素の輪を求めていく。

1
2
3
4
5
def my_sum4(lst):
if len(lst)==0:
return 0
else:
return lst[0] + my_sum4(lst[1:])

まとめ

sumだと極端かもしれないが、標準で実装済みの処理を自分でも書いてみると良い勉強になる。

記事情報

  • 投稿日:2020年3月16日
  • 最終更新日:2020年3月16日