テーマに、私のわずかな変動(私はもともと、開始/終了リストを構築し、タプルを返すために、それらをzip形式が、私は@Karl Knechtelの発電機のアプローチを好ん):ここでは
from datetime import date, timedelta
ONE_DAY = timedelta(days=1)
def find_date_windows(dates):
# guard against getting empty list
if not dates:
return
# convert strings to sorted list of datetime.dates
dates = sorted(date(*map(int,d.split('-'))) for d in dates)
# build list of window starts and matching ends
lastStart = lastEnd = dates[0]
for d in dates[1:]:
if d-lastEnd > ONE_DAY:
yield {'start_date':lastStart, 'end_date':lastEnd}
lastStart = d
lastEnd = d
yield {'start_date':lastStart, 'end_date':lastEnd}
は、テストケースのとおりです。
tests = [
['2011-02-27', '2011-02-28', '2011-03-01', '2011-04-12', '2011-04-13', '2011-06-08'],
['2011-06-08'],
[],
['2011-02-27', '2011-02-28', '2011-03-01', '2011-04-12', '2011-04-13', '2011-06-08', '2011-06-10'],
]
for dates in tests:
print dates
for window in find_date_windows(dates):
print window
print
プリント:ここ
['2011-02-27', '2011-02-28', '2011-03-01', '2011-04-12', '2011-04-13', '2011-06-08']
{'start_date': datetime.date(2011, 2, 27), 'end_date': datetime.date(2011, 3, 1)}
{'start_date': datetime.date(2011, 4, 12), 'end_date': datetime.date(2011, 4, 13)}
{'start_date': datetime.date(2011, 6, 8), 'end_date': datetime.date(2011, 6, 8)}
['2011-06-08']
{'start_date': datetime.date(2011, 6, 8), 'end_date': datetime.date(2011, 6, 8)}
[]
['2011-02-27', '2011-02-28', '2011-03-01', '2011-04-12', '2011-04-13', '2011-06-08', '2011-06-10']
{'start_date': datetime.date(2011, 2, 27), 'end_date': datetime.date(2011, 3, 1)}
{'start_date': datetime.date(2011, 4, 12), 'end_date': datetime.date(2011, 4, 13)}
{'start_date': datetime.date(2011, 6, 8), 'end_date': datetime.date(2011, 6, 8)}
{'start_date': datetime.date(2011, 6, 10), 'end_date': datetime.date(2011, 6, 10)}
あなたの例であなたのソリューションがどのように派生したかわからない。 「2011年2月28日」の日付はどこに行きましたか? – user37078
'2011-02-28'は{start_date ':' 2011-02-27 '、' end_date ':' 2011-03-01 '}の範囲にあります。 – Continuation
2番目のコードブロック、dictsのリストあなたが持っているのは、*答え*ではなく、ちょうど2番目のパラメータですか?もしそうなら、それが返されると期待しているように結果を投稿できますか? – user37078