Pythonのsum()関数を徹底解説!数値の合計を効率的に計算

Pythonでプログラミングをしていると、数値のリストやタプルなど、イテラブルなデータ構造に含まれるすべての要素を合計したい場面は頻繁にあります。例えば、商品の売上合計、テストの合計点、センサーデータの総和などです。このようなときに非常に役立つのが、Pythonの組み込み関数である**sum()関数**です。この記事では、sum()関数の基本的な使い方から、start引数を使った応用的な活用法までを初心者にもわかりやすく解説しますします。

sum()関数とは?Pythonにおける数値の合計計算

Pythonのsum()関数は、引数として与えられたイテラブル(リスト、タプル、セットなど)の数値要素をすべて合計し、その結果を返す組み込み関数です。

基本的な使い方

sum()関数は、1つまたは2つの引数を取ります。

1. イテラブルの要素を合計する

最も一般的な使い方は、数値のイテラブルを引数に指定する形式です。

Python
 
# リストの合計
numbers = [10, 20, 30, 40, 50]
total = sum(numbers)
print(f"リストの合計: {total}") # 出力: リストの合計: 150

# タプルの合計
prices = (100.5, 200.0, 50.25)
total_price = sum(prices)
print(f"タプルの合計: {total_price}") # 出力: タプルの合計: 350.75

# 集合(セット)の合計
unique_ids = {1, 5, 3}
total_ids = sum(unique_ids)
print(f"セットの合計: {total_ids}") # 出力: セットの合計: 9 (順序は保証されないが合計は同じ)

注意点:

  • sum()関数は、数値(整数、浮動小数点数)の合計にのみ使用できます。文字列などの非数値データが含まれているとTypeErrorが発生します。

    Python
     
    # mixed_list = [1, 2, "three"]
    # sum(mixed_list) # TypeError: unsupported operand type(s) for +: 'int' and 'str'
    
  • 空のイテラブルを引数に渡すと、デフォルトで0が返されます。

    Python
     
    print(sum([])) # 出力: 0
    

2. start引数を使った合計の開始値

sum()関数は、オプションで2つ目の引数startを取ることができます。これは、合計の開始値(初期値)を指定するもので、イテラブルの要素がこの値に加算されていきます。デフォルトのstart値は0です。

Python
 
# 100から合計を開始する例
data = [1, 2, 3, 4, 5]
total_from_100 = sum(data, 100)
print(f"100からの合計: {total_from_100}") # 出力: 100からの合計: 115 (100 + 1 + 2 + 3 + 4 + 5)

# 浮動小数点数を開始値にする
base_value = 5.5
add_values = [1.0, 2.0]
result = sum(add_values, base_value)
print(f"浮動小数点数の開始値: {result}") # 出力: 浮動小数点数の開始値: 8.5

sum()関数の活用事例

sum()関数は、データの集計や分析、数値計算など、さまざまな場面で利用されます。

1. 売上や費用の合計計算

ビジネスアプリケーションで、売上データや費用データを集計する際にシンプルに利用できます。

Python
 
daily_sales = [12000, 15500, 9800, 21000]
total_sales = sum(daily_sales)
print(f"今週の総売上: {total_sales}円") # 出力: 今週の総売上: 58300円

2. 平均値の算出

合計値がわかれば、要素数で割ることで簡単に平均値を算出できます。

Python
 
exam_scores = [75, 88, 92, 65, 80]
average_score = sum(exam_scores) / len(exam_scores)
print(f"平均点: {average_score:.2f}点") # 出力: 平均点: 80.00点

3. リスト内包表記との組み合わせ

条件を満たす要素のみを合計したい場合など、リスト内包表記と組み合わせると非常に強力です。

Python
 
# 10以上の数値のみを合計する
data_points = [5, 12, 8, 20, 3, 15]
sum_above_10 = sum([x for x in data_points if x >= 10])
print(f"10以上の数値の合計: {sum_above_10}") # 出力: 10以上の数値の合計: 47 (12 + 20 + 15)

4. 複雑なオブジェクトの合計(__add__メソッド)

sum()関数は、要素が数値でなくても、その要素が加算 (+) 演算をサポートしていれば機能します。たとえば、独自のクラスで__add__メソッドを定義している場合などです。

Python
 
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

vectors = [Vector(1, 2), Vector(3, 4), Vector(5, 6)]
# start引数にVectorのゼロベクトルを指定する必要がある
total_vector = sum(vectors, Vector(0, 0))
print(f"ベクトルの合計: {total_vector}") # 出力: ベクトルタルの合計: Vector(9, 12)

sum()関数と関連する関数

math.fsum()

浮動小数点数の合計において、sum()関数は精度誤差が生じる可能性があります(これは浮動小数点数演算の一般的な特性です)。より高い精度で浮動小数点数の合計を計算したい場合は、mathモジュールのfsum()関数を使用すると良いでしょう。

Python
 
import math

# 小数点の誤差が累積しやすい例
values = [0.1] * 10
print(f"sum(): {sum(values)}")     # 出力例: sum(): 0.9999999999999999
print(f"fsum(): {math.fsum(values)}") # 出力例: fsum(): 1.0

max()min()関数

max()関数はイテラブルの最大値を、min()関数は最小値を求めます。sum()と合わせて、イテラブルの数値データを分析する際によく使われる関数です。

Python
 
numbers = [10, 5, 20, 15]
print(f"最大値: {max(numbers)}") # 出力: 最大値: 20
print(f"最小値: {min(numbers)}") # 出力: 最小値: 5

まとめ

Pythonのsum()関数は、数値のイテラブルの合計を効率的かつ簡潔に計算するための非常に便利な組み込み関数です。オプションのstart引数を使うことで、合計の開始値をカスタマイズすることも可能です。

  • sum()関数は、数値のイテラブルの要素を合計します。

  • デフォルトの開始値は0ですが、start引数で変更できます。

  • 数値以外の要素が含まれるイテラブルや空のイテラブルを扱う際の注意点があります。

  • 売上計算、平均値算出、リスト内包表記との組み合わせなど、多岐にわたる場面で活用されます。

  • 浮動小数点数の高精度合計にはmath.fsum()が適しています。

この関数を理解し適切に使いこなすことで、Pythonでのデータ集計や分析作業がよりスムーズになるでしょう。

「らくらくPython塾」が切り開く「呪文コーディング」とは?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座