list
'近さ'に基づいて、前のアイテムを取得する方法はありますか?例えば:
[ Range(start=datetime.datetime(2012, 1, 1, 0, 0, 0), end=datetime.datetime(2012, 1, 15, 0, 0, 0)),
Range(start=datetime.datetime(2012, 2, 1, 0, 0, 0), end=datetime.datetime(2012, 2, 15, 0, 0, 0)),
Range(start=datetime.datetime(2012, 3, 1, 0, 0, 0), end=datetime.datetime(2012, 3, 15, 0, 0, 0))]
上記はs(と呼ばれる)をlist
含み、それぞれに開始日と終了日が含まれています。namedtuple
Range
ループなどを使って直線的にできることは知っていますが、もっと効率的にできるのではないかと思いました。
入出力例:
を入力するdatetime.datetime(2012, 1, 3, 0, 0, 0)
と、最も近い前の開始日時が返されます。
Range(start=datetime.datetime(2012, 1, 1, 0, 0, 0), end=datetime.datetime(2012, 1, 15, 0, 0, 0))
を入力datetime.datetime(2012, 1, 27, 0, 0, 0)
すると、上記と同じように返されます。
Range(start=datetime.datetime(2012, 1, 1, 0, 0, 0), end=datetime.datetime(2012, 1, 15, 0, 0, 0))
入力するdatetime.datetime(2012, 2, 14, 0, 0, 0)
と、次のようになります。
Range(start=datetime.datetime(2012, 2, 1, 0, 0, 0), end=datetime.datetime(2012, 2, 15, 0, 0, 0))