Python sum関数とは?リストの合計を計算する基本
Pythonのsum関数の基本的な使い方から応用例まで解説。リストや数値の合計を効率的に計算する方法を初心者向けに説明します。
みなさん、数字の合計を計算したいと思ったことはありませんか?
「テストの点数を合計したい」 「売上データを集計したい」 「リストの数値を足し算したい」
こんな場面って、プログラミングでよくありますよね。
でも大丈夫です! この記事では、Pythonのsum関数について、基本から実践的な使い方まで、初心者の方でもわかりやすく解説します。
sum関数をマスターすれば、数値の合計計算がとても簡単になりますよ!
sum関数って何?
sum関数とは、リストに入った数値をすべて足し算してくれるPythonの便利な機能です。
従来の方法との比較
今まではこんな風に書いていましたよね。
# 従来の方法(forループを使う)numbers = [1, 2, 3, 4, 5]total = 0
for num in numbers: total += num
print(total) # 15
でも、sum関数を使えば、こんなに簡単になります。
# sum関数を使った方法numbers = [1, 2, 3, 4, 5]total = sum(numbers)print(total) # 15
たった1行で合計が計算できました!
すごく簡単ですよね。
sum関数の基本形
sum関数の基本的な使い方はとてもシンプルです。
# 基本の形sum(リスト)
# 例:テストの点数を合計scores = [85, 92, 78, 95, 88]total = sum(scores)print(f"合計点: {total}") # 合計点: 438
**sum()**の中に数値のリストを入れるだけで、自動的に全部足してくれます。
基本的な使い方をやってみよう
sum関数でいろんな数値を合計してみましょう。
整数の合計
まずは、整数(1、2、3のような数)から始めます。
# 整数のリストを合計numbers = [10, 20, 30, 40, 50]result = sum(numbers)print(f"合計: {result}") # 合計: 150
# 小さい数から大きい数までmixed_numbers = [1, 100, 5, 200, 50]result2 = sum(mixed_numbers)print(f"合計: {result2}") # 合計: 356
どんな整数でも、きちんと合計してくれます。
小数の合計
小数(3.14のような数)も計算できます。
# 小数のリストを合計prices = [100.5, 250.0, 150.25, 300.75]total_price = sum(prices)print(f"合計金額: {total_price}円") # 合計金額: 801.5円
# 整数と小数が混ざっても大丈夫mixed = [10, 20.5, 30, 40.25]result = sum(mixed)print(f"混合の合計: {result}") # 混合の合計: 100.75
整数と小数が混ざっていても、問題なく計算してくれます。
タプルも使えます
リストだけでなく、タプル()でも計算できます。
# タプルの合計coordinates = (10, 20, 30)total = sum(coordinates)print(f"座標の合計: {total}") # 座標の合計: 60
# 商品価格のタプルproduct_prices = (1200, 800, 1500, 2000)total_cost = sum(product_prices)print(f"総額: {total_cost}円") # 総額: 5500円
タプルでもリストでも、同じように使えて便利ですね。
初期値を指定してみよう
sum関数では、計算を始める前の数値(初期値)を指定できます。
初期値の使い方
# 普通のsum関数numbers = [1, 2, 3, 4, 5]result1 = sum(numbers)print(f"普通: {result1}") # 普通: 15
# 初期値を100に設定result2 = sum(numbers, 100)print(f"初期値100: {result2}") # 初期値100: 115
**sum(リスト, 初期値)**という形で、初期値を指定できます。
上の例では、100 + 1 + 2 + 3 + 4 + 5 = 115 になりました。
実用的な初期値の例
初期値は、こんな場面で便利です。
# 前月の売上が50000円previous_sales = 50000
# 今月の日別売上daily_sales = [2000, 3500, 1800, 4200, 2800]
# 累計売上を計算(前月分 + 今月分)total_sales = sum(daily_sales, previous_sales)print(f"累計売上: {total_sales}円") # 累計売上: 64300円
# ポイントの合計(初期ポイント + 新しく獲得したポイント)initial_points = 500new_points = [50, 100, 25, 75]total_points = sum(new_points, initial_points)print(f"総ポイント: {total_points}pt") # 総ポイント: 750pt
既存の値に新しい値を追加したい時にとても便利です。
空のリストはどうなる?
空のリスト(何も入っていないリスト)を計算してみましょう。
空リストの動作
# 空のリストempty_list = []result = sum(empty_list)print(f"空リストの合計: {result}") # 空リストの合計: 0
# 初期値ありの空リストresult_with_start = sum(empty_list, 100)print(f"初期値ありの合計: {result_with_start}") # 初期値ありの合計: 100
空のリストの場合は、初期値がそのまま結果になります。
初期値を指定しなかった場合は、0が返されます。
条件によって空になるリスト
# すべての数値が条件に合わない場合numbers = [1, 2, 3, 4, 5]big_numbers = [n for n in numbers if n > 10]print(f"10より大きい数: {big_numbers}") # 10より大きい数: []
result = sum(big_numbers)print(f"合計: {result}") # 合計: 0
条件に合う数値がない場合も、安全に0が返されます。
実際に使ってみよう
sum関数を使った実用的な例をいくつか見てみましょう。
成績計算プログラム
学生の成績を集計してみます。
# 各科目の点数math_scores = [85, 92, 78, 95]english_scores = [88, 76, 90, 82]science_scores = [92, 88, 85, 90]
# 各科目の合計を計算math_total = sum(math_scores)english_total = sum(english_scores)science_total = sum(science_scores)
print(f"数学の合計: {math_total}点")print(f"英語の合計: {english_total}点")print(f"理科の合計: {science_total}点")
# 全科目の総合計all_scores = math_scores + english_scores + science_scoresgrand_total = sum(all_scores)average = grand_total / len(all_scores)
print(f"総合計: {grand_total}点")print(f"平均点: {average:.1f}点")
実行結果:
数学の合計: 350点
英語の合計: 336点
理科の合計: 355点
総合計: 1041点
平均点: 86.8点
家計簿プログラム
月の支出を管理してみましょう。
# 1週間ごとの支出week1_expenses = [5000, 3200, 1800, 2500, 4000]week2_expenses = [6000, 2800, 2200, 3500, 4500]week3_expenses = [4500, 3000, 1500, 2800, 3800]week4_expenses = [5500, 3800, 2000, 3200, 4200]
# 各週の合計week1_total = sum(week1_expenses)week2_total = sum(week2_expenses)week3_total = sum(week3_expenses)week4_total = sum(week4_expenses)
print("週別支出:")print(f"第1週: {week1_total:,}円")print(f"第2週: {week2_total:,}円")print(f"第3週: {week3_total:,}円")print(f"第4週: {week4_total:,}円")
# 月の合計支出monthly_total = week1_total + week2_total + week3_total + week4_totalprint(f"月の総支出: {monthly_total:,}円")
実行結果:
週別支出:
第1週: 16,500円
第2週: 19,000円
第3週: 15,600円
第4週: 18,700円
月の総支出: 69,800円
ゲームのスコア計算
ゲームのポイント計算をしてみます。
# ステージごとのスコアstage1_scores = [1000, 1500, 2000, 500]stage2_scores = [2500, 3000, 1800, 2200]stage3_scores = [3500, 4000, 2800, 3200]
# 各ステージの合計stage1_total = sum(stage1_scores)stage2_total = sum(stage2_scores)stage3_total = sum(stage3_scores)
print("ステージ別スコア:")print(f"ステージ1: {stage1_total:,}点")print(f"ステージ2: {stage2_total:,}点")print(f"ステージ3: {stage3_total:,}点")
# 最終スコア(ボーナスポイント付き)bonus_points = 5000final_score = sum([stage1_total, stage2_total, stage3_total], bonus_points)
print(f"ボーナス: {bonus_points:,}点")print(f"最終スコア: {final_score:,}点")
実行結果:
ステージ別スコア:
ステージ1: 5,000点
ステージ2: 9,500点
ステージ3: 13,500点
ボーナス: 5,000点
最終スコア: 33,000点
条件付きで合計してみよう
特定の条件に合う数値だけを合計することもできます。
偶数だけ合計
# 1から10までの数値numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 偶数だけを抽出even_numbers = [n for n in numbers if n % 2 == 0]print(f"偶数: {even_numbers}") # 偶数: [2, 4, 6, 8, 10]
# 偶数の合計even_sum = sum(even_numbers)print(f"偶数の合計: {even_sum}") # 偶数の合計: 30
# 一行で書く方法even_sum_short = sum([n for n in numbers if n % 2 == 0])print(f"一行で書いた場合: {even_sum_short}") # 一行で書いた場合: 30
偶数だけを選んで合計できました。
一定以上の値だけ合計
# テストの点数test_scores = [45, 78, 92, 63, 88, 55, 97, 72]
# 70点以上の点数だけを合計good_scores = [score for score in test_scores if score >= 70]print(f"70点以上: {good_scores}") # 70点以上: [78, 92, 88, 97, 72]
good_total = sum(good_scores)average = good_total / len(good_scores)
print(f"70点以上の合計: {good_total}点")print(f"70点以上の平均: {average:.1f}点")
条件に合う値だけを選んで計算できるので、とても便利ですね。
範囲指定で合計
# 商品価格リストprices = [500, 1200, 800, 2500, 300, 1800, 400, 3000]
# 1000円以上2000円以下の商品だけmid_range = [p for p in prices if 1000 <= p <= 2000]print(f"1000-2000円の商品: {mid_range}") # 1000-2000円の商品: [1200, 1800]
mid_total = sum(mid_range)print(f"中価格帯の合計: {mid_total}円") # 中価格帯の合計: 3000円
価格帯を指定して合計することもできます。
エラーを避けるコツ
sum関数を使う時の注意点を確認しましょう。
数値以外が混ざっている場合
sum関数は、数値以外があるとエラーになります。
# これはエラーになりますmixed_data = [1, 2, "3", 4, 5]
try: result = sum(mixed_data) print(result)except TypeError as e: print(f"エラーが発生: {e}") # 数値だけを取り出して計算 numbers_only = [x for x in mixed_data if isinstance(x, (int, float))] print(f"数値のみ: {numbers_only}") # 数値のみ: [1, 2, 4, 5] result = sum(numbers_only) print(f"合計: {result}") # 合計: 12
文字列や他のデータが混ざっている場合は、事前に数値だけを取り出しましょう。
安全な計算関数
エラーを防ぐための関数を作ってみます。
def safe_sum(data): """安全に数値の合計を計算する関数""" if not data: # 空のリストの場合 return 0 numbers = [] for item in data: if isinstance(item, (int, float)): numbers.append(item) else: print(f"'{item}'は数値ではないので無視します") return sum(numbers)
# テストしてみるtest_data = [1, 2, "hello", 3.5, None, 4]result = safe_sum(test_data)print(f"安全な合計: {result}")
実行結果:
'hello'は数値ではないので無視します
'None'は数値ではないので無視します
安全な合計: 10.5
この関数を使えば、どんなデータが入っていても安全に計算できます。
None値のチェック
None(何もない値)が含まれる場合の対処法です。
def calculate_total(scores): """スコアの合計を計算(None値を除外)""" if not scores: return 0 # None以外の数値だけを抽出 valid_scores = [score for score in scores if score is not None] if not valid_scores: print("有効なスコアがありません") return 0 total = sum(valid_scores) print(f"有効なスコア数: {len(valid_scores)}") return total
# テストデータscores = [85, None, 92, 78, None, 95]total = calculate_total(scores)print(f"合計スコア: {total}")
実行結果:
有効なスコア数: 4
合計スコア: 350
まとめ
Pythonのsum関数について、基本から実践的な使い方まで詳しく解説しました。
今日覚えてほしいポイント
- sum関数は、リストの数値をすべて足し算してくれる
- 初期値を指定することもできる
- 空のリストでも安全に動作する
- 条件付き合計で特定の値だけを計算可能
- エラー対策も忘れずに
sum関数が活躍する場面
- 成績や点数の集計
- 売上や支出の計算
- ゲームのスコア計算
- データ分析や統計処理
- 家計簿やお小遣い帳
sum関数は、Pythonで数値を扱う時の基本的なツールです。 今日学んだことを活かして、実際に数値計算プログラムを作ってみてくださいね。
まずは簡単なリストの合計から始めて、徐々に複雑な計算にも挑戦してみましょう! きっとプログラミングがもっと楽しくなりますよ。