Pythonで等差(共通の差分)を持つ行だけを抽出するプログラムの書き方
リストの中から「隣り合う要素同士の差が一定(等差数列)になっている行」だけを抽出したい場合、繰り返し処理とフラグ変数を組み合わせるのが基本的なアプローチです。
サンプルコード
以下に具体的な実装例を示します。
my_list = [[31, 27, 10], [8, 11, 12], [11, 12, 13], [6, 9, 10]]
print("元のリスト:")
print(my_list)
my_result = []
for row in my_list:
temp = True
for index in range(0, len(row) - 1):
if row[index + 1] - row[index] != row[1] - row[0]:
temp = False
break
if temp:
my_result.append(row)
print("抽出結果のリスト:")
print(my_result)実行結果
元のリスト: [[31, 27, 10], [8, 11, 12], [11, 12, 13], [6, 9, 10]] 抽出結果のリスト: [[11, 12, 13]]
処理の流れと解説
- まず、複数のリスト(行)を含むネストされたリストを定義し、コンソールに表示します。
- 抽出結果を格納するための空のリストを作成します。
- 外側のループで各行を順番に取り出し、判定用のフラグ変数を
Trueで初期化します。 - 内側のループで、行内の各要素のインデックスを走査します。
- 隣接する要素同士の差が、先頭2要素の差(基準となる公差)と一致しない場合、フラグ変数を
Falseに設定します。 - 不一致が見つかった時点で
breakにより内側のループを抜け、無駄な比較を省きます。 - 最終的にフラグが
Trueのままなら、その行は等差数列であるため、結果用のリストに追加します。 - すべての行の判定が完了したら、結果のリストをコンソールに出力します。
ポイント
この手法では、各行の先頭2要素の差 row[1] - row[0] を基準値として扱い、以降のすべての隣接要素間の差がこの基準と一致するかどうかを検証しています。これにより、[11, 12, 13] のように公差が一定の行だけが正確に抽出されます。要素数が2以下の行は常に条件を満たす点にも注意してください。
-
Pythonで特定のペア合計を持つ行をフィルタリングする方法
リストの中から、特定の合計値になる2つの要素(ペア)を含む行だけを抽出したい場面はよくあります。Pythonでは、専用の関数を定義し、リスト内包表記と組み合わせることで、この処理をシンプルかつ効率的に実現できます。本記事では、指定したキー(目標値)と一致するペア合計を持つ行をフィルタリングするプログラムを、コード例・実行結果・詳しい解説とともに紹介します。コード例def find_sum_pair(val, key): for index in range(len(val)): for ix in range(index +
-
Pythonでタプルのリストから正の要素のみを持つタプルを抽出する方法
タプルのリストから「すべての要素が正の値(0以上)」であるタプルだけを取り出したい場合、リスト内包表記を使うと非常に簡潔に実現できます。 サンプルコード my_list = [(56, 43), (-31, 21, 23), (51, -65, 26), (24, 56)] print("The list is : ") print(my_list) my_result = [sub for sub in my_list if all(elem >= 0 for elem in sub)] print("The positive elements ar