« MIDI音源はどこで売っているのだ日記 |Main| バレンタインデー日記 »

« PythonとJavaScriptの微妙な違い | Python | Pythonにおけるタプルの存在意義 リターンズ »

差分リストを作るには

問:空欄を埋めて、与えられた数値のリスト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 5
for文でそうやってアクセスするだけなのであれば、 僕ならこう書くかな。
>>> 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

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/506

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.