【Python】リスト内の連続する要素(重複含む)の合計を求めるプログラム
リスト内の連続する数値の合計を求める際、末尾の要素と先頭の要素もペアとして扱いたい(=重複する隣接要素を含めて合計したい)ケースがあります。このような場合、リスト内包表記、リストスライス、連結演算子「+」、そしてzipメソッドを組み合わせることで、簡潔かつ効率的に実装できます。
この記事では、リストの各要素とその隣の要素を足し合わせ、さらに最後の要素と最初の要素のペアも含めて合計を計算する方法を、サンプルコード付きで解説します。
サンプルコード
以下に具体的な実装例を示します。
my_list = [41, 27, 53, 12, 29, 32, 16]
print("The list is :")
print(my_list)
my_result = [a + b for a, b in zip(my_list, my_list[1:] + [my_list[0]])]
print("The result is :")
print(my_result)
出力結果
The list is : [41, 27, 53, 12, 29, 32, 16] The result is : [68, 80, 65, 41, 61, 48, 57]
処理の流れと解説
リストの定義と表示: まず整数のリストを定義し、コンソールに表示します。
リスト内包表記による反復処理: リスト内包表記を使って、各要素に対して順番に処理を行います。
zipメソッドとスライスの活用:
my_list[1:]で2番目以降の要素を取り出し、+ [my_list[0]]で先頭の要素を末尾に連結することで、リストを1つずらした新しいシーケンスを作成します。これを元のリストとzipで組み合わせることで、「各要素とその隣の要素」のペアが生成され、最後の要素と最初の要素のペアも自動的に含まれます。結果のリスト化と代入: 計算結果はリストとして変換され、変数
my_resultに代入されます。結果の出力: 最後に、この変数の内容がコンソールに出力されます。
動作のポイント
出力結果を見ると、例えば最初の要素 41 + 27 = 68、そして最後は 16 + 41 = 57 のように、リストが環状につながっているかのように隣接要素同士が合計されていることがわかります。これは my_list[1:] + [my_list[0]] というスライスと連結のテクニックによって実現されています。
この手法を使えば、forループやインデックス管理を明示的に書くことなく、わずか1行のリスト内包表記で循環的な隣接要素の合計を美しく表現できます。データ分析や信号処理など、隣接データ間の差分・合計を扱う場面でぜひ活用してみてください。
-
Pythonでリストの累積和(累積合計)を求める方法
この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:
-
Pythonでフィボナッチ数を求める方法:再帰と動的計画法の2つのアプローチを徹底解説
本記事では、「n番目のフィボナッチ数を計算する」という問題に対する解決策と考え方を、2つの異なるアプローチ(再帰的手法と動的計画法)のコード例とともにわかりやすく解説します。 問題の概要 今回の課題は、n番目のフィボナッチ数を求めることです。 フィボナッチ数列 Fn は、次の漸化式によって定義されます。 Fn = Fn-1 + Fn-2 初期値(シード値)は以下の通りです。 F0 = 0、F1 = 1 この問題を解くには、主に次の2つの方法があります。 再帰的なアプローチ 動的計画法によるアプローチ アプローチ1:再帰的な手法 まずは、定義そのものをそのままコードに反映させた再帰的な実