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
本記事に無い方法についても記載されています。
コメント