我有一个这样的列表:
dates = [
datetime.date(2014, 11, 24),
datetime.date(2014, 11, 25),
datetime.date(2014, 11, 26),
# datetime.date(2014, 11, 27), # This one is missing
datetime.date(2014, 11, 28),
datetime.date(2014, 11, 29),
datetime.date(2014, 11, 30),
datetime.date(2014, 12, 1)]
我正在尝试使用以下 expr 查找开始日期和结束日期之间缺少的日期:
date_set = {dates[0] + timedelta(x) for x in range((dates[-1] - dates[0]).days)}
奇怪的是,它抛出了一个错误——它不能访问dates
变量。但是这个表达式运行良好:
date_set = {date(2015,2,11) + timedelta(x) for x in range((dates[-1] - dates[0]).days)}
我写了一个表达我想要的东西:
def find_missing_dates(dates: list[date]) -> list[date]:
"""Find the missing dates in a list of dates (that should already be sorted)."""
date_set = {(first_date + timedelta(x)) for first_date, x in zip([dates[0]] * len(dates), range((dates[-1] - dates[0]).days))}
missing = sorted(date_set - set(dates))
return missing
这是一个丑陋的表达式,迫使我用相同的变量填充第二个列表。有人有更干净的表达吗?