从不同的日期数python计算天数

时间:2018-04-19 14:03:04

标签: python

对于具有多个日期的特定用户,我想计算两个日期之间的总天数。这里的问题是特定用户以随机间隔有大约5个日期,我想为用户计算频率。对于两个日期,我知道如何计算,但不知道日期的数量。

数据看起来像: [datetime.date(2016, 1, 1) datetime.date(2016, 3, 25) datetime.date(2016, 4, 15)]我希望计算日期之间的差距总数。

提前致谢!

2 个答案:

答案 0 :(得分:2)

假设您需要列表中日期之间的差异。您可以遍历列表并使用enumerate

import datetime
l = [datetime.date(2016, 1, 1), datetime.date(2016, 3, 25), datetime.date(2016, 4, 15)]
leng = len(l)
res = 0
for i,v in enumerate(l):
    if i+1 == leng:
        break
    else:
        res += (l[i+1] - v).days 
print(res)

<强>输出:

105

答案 1 :(得分:1)

鉴于您需要第一个和最后一个日期之间的差异(列表不需要排序),您可以这样做:

from datetime import date

days = [date(2016, 1, 1), date(2016, 3, 25), date(2016, 4, 15)] 

print (max(days) - min(days)).days    #Prints 105

由于中间有多少个日期无关紧要,因此结果与(days[2] - days[1]) + (days[1] - days[0])相同。如您所见,days[1]取消,结果只是排序列表中的days[2] - days[0]

以下是我原来的答案,我认为每天之间需要平均值

鉴于日期列表已排序,您可以使用pairwise recipe使用itertools.tee来创建一个生成器,该生成器会为您获取所有差异,然后从结果中获取以天为单位的算术平均值。 / p>

from datetime import date
from itertools import tee

days = [date(2016, 1, 1), date(2016, 3, 25), date(2016, 4, 15)] 

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

def mean(numbers):
    numbers = list(numbers)
    return float(sum(num.days for num in numbers)) / max(len(numbers), 1)

pairs = pairwise(days)                # Returns [(datetime.date(2016, 1, 1), datetime.date(2016, 3, 25)), (datetime.date(2016, 3, 25), datetime.date(2016, 4, 15))]
diff = list(b - a for a, b in pairs)  # Returns [datetime.timedelta(84), datetime.timedelta(21)]
print mean(diff)                      # Returns 52.5