Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで再帰を使ってネストされたリストの合計を求める方法


再帰(リカージョン)の手法を使ってネストされたリスト(入れ子構造のリスト)の合計値を求めるには、リストを引数として受け取るユーザー定義関数を作成します。

再帰とは、大きな問題をより小さな部分問題に分割してそれぞれの結果を計算し、それらを組み合わせることで全体の解を導き出す手法です。ネストされたリストのように階層構造を持つデータの処理に特に適しています。

なお、Pythonのリストは整数・浮動小数点数・文字列など、異なるデータ型の値を混在させて格納できる柔軟なデータ構造です。

サンプルコード

以下に具体的な実装例を示します。

def recursion_sum(my_list):
    my_total = 0
    for elem in my_list:
        if (type(elem) == type([])):
            my_total = my_total + recursion_sum(elem)
        else:
            my_total = my_total + elem
    return my_total

my_list = [[2,3], [7,9], [11,45], [78,98]]
print("The list elements are :")
print(my_list)
print( "The sum is :")
print(recursion_sum(my_list))

実行結果

The list elements are :
[[2, 3], [7, 9], [11, 45], [78, 98]]
The sum is :
253

コードの解説

  • 「recursion_sum」という名前の関数を定義し、リストを引数として受け取ります。
  • まず、合計値を格納する変数を0で初期化します。
  • リスト内の各要素を順番に走査し、要素の型がリスト型と一致する場合は、その要素に対して自分自身の関数を再度呼び出し(再帰呼び出し)、その戻り値を合計に加算します。
  • リスト型でない場合は、その値をそのまま変数に加算します。
  • 最終的な合計値をreturn文で返し、コンソールに出力します。
  • 関数の外部では、以下の処理が行われます。
  • ネストされたリストを定義し、その内容をコンソールに表示します。
  • このリストを引数として渡してrecursion_sum関数を呼び出します。
  • 計算結果である合計値がコンソールに出力されます。

補足:isinstance()を使ったより安全な判定

上記のコードではtype(elem) == type([])で型を比較していますが、Pythonではisinstance(elem, list)を使う方が推奨されています。isinstanceはサブクラスも正しく判定できるため、より堅牢なコードになります。

  1. リスト内の要素の合計を求めるPythonプログラム

    この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に