差分リストを作るには
問:空欄を埋めて、与えられた数値のリストrawdataから、差分のリストdiffdataを作成せよ(via [Python-ml-jp 3850] リスト要素の差分リストの求め方)
>>> rawdata = [3, 1, 4, 1, 5, 9, 2, 6, 5] (空欄) >>> d = 0 >>> for diff in diffdata: d += diff print d, 3 1 4 1 5 9 2 6 5for文でそうやってアクセスするだけなのであれば、 僕ならこう書くかな。
>>> rawdata = [3, 1, 4, 1, 5, 9, 2, 6, 5] >>> def diffGen(aList): yield aList[0] for i in range(1, len(aList)): yield aList[i] - aList[i - 1] >>> diffdata = diffGen(rawdata) >>> d = 0 >>> for diff in diffdata: d += diff print d, 3 1 4 1 5 9 2 6 5もし添え字を指定してアクセスしたいのであればこうかな。
>>> class DiffList: def __init__(self, base): self.base = base def __getitem__(self, i): if i == 0: return self.base[0] else: return self.base[i] - self.base[i - 1] >>> diffdata = DiffList(rawdata) >>> d = 0 >>> for diff in diffdata: d += diff print d, 3 1 4 1 5 9 2 6 5 >>> diffdata[2] 3
でまぁ、オチのワンライナーはこんな感じ。
>>> [(i == 0 and [rawdata[0]] or [rawdata[i] - rawdata[i - 1]])[0]\
for i in range(len(rawdata))]
[3, -2, 3, -3, 4, 4, -7, 4, -1]
>>> diffdata = _
>>> d = 0
>>> for diff in diffdata:
d += diff
print d,
3 1 4 1 5 9 2 6 5