Сортировка списка дат и итерация по нему, помня предыдущую запись. Если разница между предыдущей и текущей записью превышает один день, у вас есть пропущенные дни.
Вот один из способов реализовать это:
from datetime import date, timedelta
from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
b.next()
return izip(a, b)
def missing_dates(dates):
for prev, curr in pairwise(sorted(dates)):
i = prev
while i + timedelta(1) < curr:
i += timedelta(1)
yield i
dates = [ date(2010, 1, 8),
date(2010, 1, 2),
date(2010, 1, 5),
date(2010, 1, 1),
date(2010, 1, 7) ]
for missing in missing_dates(dates):
print missing
Выход:
2010-01-03
2010-01-04
2010-01-06
Производительность O (n * log (n)), где n - количество дней в интервале, когда входные данные не отсортированы. Поскольку ваш список уже отсортирован, он будет работать в O (n).