sum
このページでは豊富な例を用いてPythonのsum関数(組み込み関数)を学ぶことができます。
sum関数はPythonの組み込み関数の1つです。
第1引数に「要素に数値を持つ反復可能なオブジェクト(iterable object)」を指定し、要素の総和・合計を戻り値として返します。
第2引数に数値を指定することができ、この値は要素の総和に加算されます。
TL;DR
基本
# 数値を要素に持つ反復可能オブジェクト(iterable)を引数に指定すると、要素の総和が戻り値として返る
list1 = [0, 1, 2]
return_value1 = sum(list1)
print(return_value1)
==> 3
print(type(return_value1))
==> <class 'int'>
# 要素がfloatの場合
tuple1 = (1.4, 2.3, 2.60)
return_value2 = sum(tuple1)
print(return_value2)
==> 6.3
print(type(return_value2))
==> <class 'float'>
# 要素の数値型が混合の場合
list2 = [1, 2.2, 3 + 3j]
return_value3 = sum(list2)
print(return_value3)
==> (6.2+3j)
print(type(return_value3))
==> <class 'complex'>
# 要素が空の場合
list3 = []
return_value4 = sum(list3)
print(return_value4)
==> 0
print(type(return_value4))
==> <class 'int'>
# range関数の使用(range型は反復可能なオブジェクトです)
return_value5 = sum(range(3))
print(return_value5)
==> 3
# 要素の型が数値型でない場合
list4 = ['1', '2', '3']
sum(list4)
==> TypeError: unsupported operand type(s) for +: 'int' and 'str'
関連情報:list(リスト・配列)の使用方法
関連情報:type(組み込み関数)の使用方法
関連情報:rangeの使用方法
総和に加える数値の指定
# 第2引数に要素の総和に足す数値を指定できる
list1 = [0, 1, 2]
return_value1 = sum(list1, 100)
print(return_value1)
==> 103
# キーワード引数としても指定できる
tuple1 = (100, 200)
return_value2 = sum(tuple1, start=1)
print(return_value2)
==> 301
# 要素が空の場合
list2 = []
return_value3 = sum(list2, -10)
print(return_value3)
==> -10
関連情報:関数のキーワード引数使用方法
要素が数値型でないオブジェクトの処理
# 要素が数値型でないとエラー
list1 = ['1', '2', '3']
return_value1 = sum(list1)
==> TypeError: unsupported operand type(s) for +: 'int' and 'str'
# 各要素を数値型に変換してからsum関数の引数に渡す
list1 = ['1', '2', '3']
# リスト内包表記
int_list1 = [int(i) for i in list1]
return_value2 = sum(int_list1)
print(return_value2)
==> 6
# ジェネレータ式を使用するとより簡潔に記述できる
list1 = ['1', '2', '3']
return_value3 = sum(int(i) for i in list1)
print(return_value3)
==> 6
# 上記のジェネレータ式を丁寧に記述すると以下
list1 = ['1', '2', '3']
# ジェネレータオブジェクトを生成
generator1 = (int(i) for i in list1)
print(type(generator1))
==> <class 'generator'>
return_value4 = sum(generator1)
print(return_value4)
==> 6
関連情報:リスト内包表記の使用方法
解説
基本
sum関数は反復可能なオブジェクト(iterable object)の要素の合計を計算し、その合計値を戻り値として返します。
第1引数には「すべての要素が数値である反復可能オブジェクト」を指定します。 すべての要素が数値のリストオブジェクトやタプルオブジェクトなどが該当します。
要素に1つでも数値でないオブジェクトが存在する場合、sum関数はTypeError
を発生させます。
list1 = [100, 200, 300]
return_value1 = sum(list1)
print(return_value1)
==> 600
print(type(return_value1))
==> <class 'int'>
tuple1 = (3.14, 10)
return_value2 = sum(tuple1)
print(return_value2)
==> 13.14
print(type(return_value2))
==> <class 'float'>
list2 = []
print(sum(list2))
==> 0
# range関数の使用
return_value3 = sum(range(11))
print(return_value3)
==> 55
# 要素の型が数値型でない場合
tuple2 = ('1', '2')
sum(tuple2)
==> TypeError: unsupported operand type(s) for +: 'int' and 'str'
関連情報:list(リスト・配列)の使用方法
関連情報:type(組み込み関数)の使用方法
関連情報:rangeの使用方法
総和に加える数値の指定
第2引数に数値を指定すると、要素の総和に任意の値を加算することができます。
この引数はstartという名前でキーワード引数として指定することもできます。
list1 = [100, 200]
return_value1 = sum(list1, 1000)
print(return_value1)
==> 1300
# キーワード引数として指定
tuple1 = (0, 1, 2)
return_value2 = sum(tuple1, start=0.99)
print(return_value2)
==> 3.99
tuple2 = ()
return_value3 = sum(tuple2, -1)
print(return_value3)
==> -1
関連情報:関数のキーワード引数使用方法
要素が数値型でないオブジェクトの処理
反復可能オブジェクトの要素が数値型ではないが、数値を表す場合があります。
例えば文字列オブジェクトの'100'
などです。
こういった要素がリストなどの反復可能オブジェクトに含まれる場合、sum関数を用いて足し算を行う前に、適切な数値の型に変換する必要があります。
このページでは リスト内包表記 や ジェネレータ式 を用いた文字列から数値型への変換例を掲載しています。
使用する場面に合わせた適切な方法を選択してください。
# 要素が数値型でない場合
list1 = ['100', '200']
return_value1 = sum(list1)
==> TypeError: unsupported operand type(s) for +: 'int' and 'str'
# 各要素を数値型に変換してからsum関数の引数に渡す
list1 = ['100', '200']
# リスト内包表記
int_list1 = [int(i) for i in list1]
return_value2 = sum(int_list1)
print(return_value2)
==> 300
# ジェネレータ式を使用した場合
tuple1 = ('1.1', '2.2', '100')
return_value3 = sum(float(i) for i in tuple1)
print(return_value3)
==> 103.3
# ジェネレータ式を丁寧に記述した場合
tuple1 = ('1.1', '2.2', '100')
# ジェネレータオブジェクトを生成
generator1 = (float(i) for i in tuple1)
print(type(generator1))
==> <class 'generator'>
return_value4 = sum(generator1)
print(return_value4)
==> 103.3