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

Pythonでリスト内のすべてのペア間の絶対差の合計を求めるプログラム

本記事では、リスト内のすべてのペア間の絶対差の合計を求める問題の解法とアプローチについて解説します。

問題文

リストが入力として与えられたとき、そのリスト内のすべてのペア間の絶対差の合計を求める必要があります。

解法のアプローチ

enumerate() メソッドは、イテラブル(反復可能オブジェクト)にカウンターを付加し、enumerate オブジェクトとして返す組み込み関数です。ループ処理の中でインデックスと要素を同時に取得したい場合に非常に便利です。

この手法では、まず絶対差を格納するためのリスト「diffs」を用意します。

次に、2つの変数を持つ二重ループを使用します。片方はカウンター(インデックス)を走査するため、もう片方はリストの要素を扱うためのものです。各反復処理では、2つの要素が同じ位置(同一インデックス)かどうかを判定します。

同じ位置でなければ、両者の絶対差を計算し、diffs リストに追加していきます。

最後に diffs リストの合計値を求めます。この方法では各ペアが2回カウントされてしまうため、最終的な合計を2で割ることで目的の値を算出して返します。

サンプルコード

def sumPairs(lst):
    diffs = []
    for i, x in enumerate(lst):
        for j, y in enumerate(lst):
            if i != j:
                diffs.append(abs(x - y))
    return int(sum(diffs) / 2)

# ドライバープログラム
lst = [22, 3, 55, 43]
print(sumPairs(lst))

出力

177

処理の流れ

すべての変数と関数はグローバルスコープで宣言されています。全体の処理の流れは以下の通りです。

  • 外側のループでリストから各要素 x を取り出します。
  • 内側のループでリストの全要素 y と比較し、インデックスが異なる場合(i != j)に絶対差 abs(x - y) を diffs に追加します。
  • すべての組み合わせを処理した後、合計値を2で割って重複分を除外し、結果として整数で返します。

なお、この実装は二重ループを使用しているため、時間計算量は O(n²) となります。リストの要素数が多い場合はパフォーマンスへの影響に注意が必要です。

まとめ

本記事では、enumerate() と二重ループを活用して、リスト内のすべてのペア間の絶対差の合計を求める方法について学びました。各ペアが2回カウントされるという仕組みを理解し、最終的に2で割ることで正しい結果が得られることを確認しました。

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

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

  2. Pythonでリスト内のすべてのペア間の絶対差の合計を求めるプログラム

    本記事では、リスト内のすべてのペア間の絶対差の合計を求める問題の解法とアプローチについて解説します。 問題文 リストが入力として与えられたとき、そのリスト内のすべてのペア間の絶対差の合計を求める必要があります。 解法のアプローチ enumerate() メソッドは、イテラブル(反復可能オブジェクト)にカウンターを付加し、enumerate オブジェクトとして返す組み込み関数です。ループ処理の中でインデックスと要素を同時に取得したい場合に非常に便利です。 この手法では、まず絶対差を格納するためのリスト「diffs」を用意します。 次に、2つの変数を持つ二重ループを使用します。片方はカウンター(イ