比较两个包含Python日期的列表

时间:2018-02-21 09:57:16

标签: python list

我有两个函数dte()并生成dates(),它们都在特定范围内打印日期。

def dte(): 
    date = (' '.join(map(str,ddt)))      
    return date

print dte()


def generate_dates(start_date, end_date):
    td = datetime.timedelta(hours=24)
    current_date = start_date
    while current_date <= end_date:
        print current_date
        current_date += td
    start_date = datetime.date(2017, 10, 25)
    end_date = datetime.date(2017, 10, 28)

dte()包含一些缺失日期,而generate_dates()已完成。如何比较它们并将其存储在另一个缺失值为0的列表中?

例如:[2017-10-25 , 0 , 2017-10-27 , 0 , 0 , 2017-10-30...]

编辑:这是打印两个功能时的输出:

('2017-07-26',) ('2017-07-27',) ('2017-07-28',) ('2017-07-29',)       ('2017-07-30',) ('2017-07-31',) ('2017-08-01',) ('2017-08-02',) ('2017-08-03',) ('2017-08-04',) ('2017-08-05',) ('2017-08-08',) ('2017-08-09',) ('2017-08-10',) ('2017-08-11',) ('2017-08-12',) ('2017-08-14',) ('2017-08-16',) ('2017-08-17',) ('2017-08-18',) ('2017-08-19',) ('2017-08-21',) ('2017-08-22',) ('2017-08-23',) ('2017-08-24',)

2017-07-26
2017-07-27
2017-07-28
2017-07-29
2017-07-30
2017-07-31
2017-08-01
2017-08-02
2017-08-03
2017-08-04
2017-08-05
2017-08-06
2017-08-07
2017-08-08
2017-08-09
2017-08-10
2017-08-11
2017-08-12
2017-08-13
2017-08-14
2017-08-15
2017-08-16
2017-08-17
2017-08-18
2017-08-19
2017-08-20
2017-08-21
2017-08-22
2017-08-23
2017-08-24

1 个答案:

答案 0 :(得分:0)

以下是使用您自己的代码的简单示例:

import datetime

ddt = [
    datetime.date(2017,10,25),
    datetime.date(2017,10,27),
    datetime.date(2017,10,28),
]

def generate_dates(start_date, end_date):
    res = []
    td = datetime.timedelta(hours=24)
    current_date = start_date
    while current_date <= end_date:
        res.append(current_date)
        current_date += td
    return res

start_date = datetime.date(2017, 10, 25)
end_date = datetime.date(2017, 10, 30)

all_dates = generate_dates(start_date, end_date)

res = []
for date in all_dates:
    if date not in ddt:
        res.append(0)
    else:
        res.append(date)

print map(str, res)

输出:

['2017-10-25', '0', '2017-10-27', '2017-10-28', '0', '0']

请注意,我更改了generate_dates()函数以返回完整的日期范围(不仅仅是打印它们)。

另请注意,此代码不是最佳的。它的复杂度为O(N * M),其中N - 的大小为ddt,M - 大小为all_dates。因此,对于大型列表来说,它绝对不是最佳选择。如果您的列表ddt很大,您可能希望在最后一个周期之前将其转换为集合:

ddt = set(ddt)

这种复杂性将是O(M)。