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

【Python入門】リスト内の連続する要素の差分を求める3つの方法

この記事では、数値のみで構成されたリストに対して、隣り合う2つの要素(連続する要素ペア)の差分を計算し、その結果を新しいリストとして生成する方法を解説します。Pythonでは複数のアプローチが可能で、それぞれ特徴があります。

方法1:インデックスを使う

forループと要素のインデックスを組み合わせることで、連続する要素ペアの差分を簡単に求められます。リスト内包表記を使えば、コードも簡潔に書けます。

サンプルコード

listA = [12,14,78,24,24]
# 元のリスト
print("元のリスト : \n",listA)
# インデックス位置を利用
res = [listA[i + 1] - listA[i] for i in range(len(listA) - 1)]
# 結果を出力
print ("連続する要素の差分リスト : \n" ,res)

実行結果

上記のコードを実行すると、以下の出力が得られます。

元のリスト :
[12, 14, 78, 24, 24]
連続する要素の差分リスト :
[2, 64, -54, 0]

方法2:スライスとzip関数を使う

スライシングを利用した手法です。リストから「最後の要素を除いたもの」と「最初の要素を除いたもの」を切り出し、zip関数で対応する要素同士をペアにして差分を計算します。インデックス管理が不要になるため、可読性が高いのが特徴です。

サンプルコード

listA = [12,14,78,24,24]
# 元のリスト
print("元のリスト : \n",listA)
# リストのスライスを利用
res = [x - y for y, x in zip(listA[: -1], listA[1 :])]
# 結果を出力
print ("連続する要素の差分リスト : \n" ,res)

実行結果

上記のコードを実行すると、以下の出力が得られます。

元のリスト :
[12, 14, 78, 24, 24]
連続する要素の差分リスト :
[2, 64, -54, 0]

方法3:operator.subとmap関数を使う

operatorsモジュールが提供するsubメソッド(減算関数)を、map関数経由で適用する方法です。ここでもスライスによって連続する要素ペアを作成します。組み込みの演算子関数を活用するため、処理速度面で有利な場合があります。

サンプルコード

import operator
listA = [12,14,78,24,24]
# 元のリスト
print("元のリスト : \n",listA)
# operator.sub を利用
res = list(map(operator.sub, listA[1:], listA[:-1]))
# 結果を出力
print ("連続する要素の差分リスト : \n" ,res)

実行結果

上記のコードを実行すると、以下の出力が得られます。

元のリスト :
[12, 14, 78, 24, 24]
連続する要素の差分リスト :
[2, 64, -54, 0]

まとめ

いずれの方法でも同じ結果 [2, 64, -54, 0] が得られます。用途に応じて使い分けるのがおすすめです。

  • インデックス方式: ロジックが直感的で理解しやすい
  • スライス+zip方式: Pythonらしい簡潔な記述ができる
  • operator.sub+map方式: 関数型スタイルで大規模データにも向く

なお、Python 3.10以降では標準ライブラリの itertools.pairwise を使うことでも同様の処理が実現できますので、環境に合わせて選択してください。

  1. 【Python】タプルが出現するまでリスト内の要素数をカウントする方法

    リストAが与えられたとき、このリストにはネストされたタプルが含まれています。ここでの課題は、タプルの要素に到達するまで、リスト内の要素数をカウントすることです。この処理には、Python組み込みの isinstance() 関数を使用します。 isinstance() 関数は2つの引数を受け取ります。第1引数の「object」は判定対象となるオブジェクト、第2引数の「classinfo」はクラス・型、あるいはクラスや型のタプルです。オブジェクトが指定したクラス(またはそのサブクラス)のインスタンスである場合、もしくはタプル内のいずれかの型に一致する場合に True を返し、それ以外の場合は F

  2. Pythonでリストから重複要素を削除する方法を徹底解説

    重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。