2007年6月28日木曜日

日付incrementをリストの内包表記で書いてみた

リストの内包表記で、ジェネレータが作れるのを忘れていたので、
考えてみたけど、こんなのしか思いつかなかった。

毎回、timedeltaを作るから、なんかもったいないな。

前回yieldした値がとれれば、前回+deltaを返すだけなんだけどな。

>>> from datetime import timedelta, date, datetime
>>> d = date(2007, 6, 23)
>>> delta = timedelta(days=1)
>>> for i in (d+timedelta(days=x) for x in range(0, 10)):
  print i

2007-06-23
2007-06-24
(省略)

なんとか、毎回timedeltaを作らないようにしてみたけど、さすがにこっちの方が遅いな。
timedelta作らなくても、rangeでタプル作ってて意味なさそうだし、reduceで関数呼びまくるし。

>>> for i in (reduce(lambda x,y: x+delta, range(0, c), d) for c in range(0, 10)):
  print i

2007-06-23
2007-06-24
(省略)



0 件のコメント:

コメントを投稿