python リストの各要素の差を求めリストに格納する方法!

1つのリストについて、全てのi番目の要素とi+1番目の要素の差を求め、リストに格納する方法を紹介します。

zip関数とリスト内包表記

l = [1, 2, 4, 7, 11, 16]
#①
dif = [j-i for i, j in zip(l[:-1], l[1:])]
print(dif)
"""出力
[1, 2, 3, 4, 5]
"""

①について

  • zip(l[:-1], l[1:])によってタプルのイテレータを返します。
  • 上記のタプルに対してシーケンスのアンパック行うことで、iにはl[:-1]の要素が入り、jにはl[1:]の要素が入ります。【A】
  • j-iが計算されます。【B】
  • リスト内包表記によって、l[:-1]とl[1:]の要素数回だけ上記の【A】と【B】が実行されます。最後に、各j-iを要素とするリストがdifに代入されます。
    • l[:-1]は[ 1, 2, 4, 7,11]であり、各要素がiに入る。
    • l[1:] は[ 2, 4, 7,11,16]であり、各要素がjに入る。
    • 全ての要素に対して、j-iを実行すると上記プログラムの出力結果となる。

参考

5. データ構造 — Python 3.9.4 ドキュメント
シーケンスのアンパック

range関数とリスト内包表記

l = [1, 2, 4, 7, 11, 16]
#①
dif = [l[i+1] - l[i] for i in range(len(l) - 1)]
print(dif)
"""出力
[1, 2, 3, 4, 5]
"""

①について

  • i=0から4までの計5回、l[i+1] – l[i]が実行されその結果を要素とするリストがdifに代入されます。

参考

Python: Finding differences between elements of a list – Stack Overflow
本記事に無い方法についても記載されています。

コメント

タイトルとURLをコピーしました