在Python中,假设我们有两个日期:
date_from = datetime.date(2014,02,8)
date_to = datetime.date(2014,12,9)
我们需要计算这两天之间每周工作日的次数 . 有什么好方法可以解决这个问题?
例如,如果我们有:
date_from = datetime.date(2014,11,30) # Sunday
date_to = datetime.date(2014,12,9) # Tuesday
我正在寻找的答案是(以字符串或数字形式的星期几)是:
'Sunday': 2
'Monday': 2
'Tuesday': 2
'Wednesday': 1
'Thursday': 1
'Friday': 1
'Saturday': 1
5 回答
试试这个:
另一个需要:
然后:
[更新]
Mark Ransom评论道:
我确信还有很多其他方法可以达到相同的效果,但有什么意义呢?也许有人担心表现 . 我不是 - 因为:
O(n)
和O(n log n)
之间的差异与n的小值无关 .正如古老的唐纳德·克努特所说的_999_:"Premature optimization is the root of all evil" .
关于表现的问题的答案总是"profile it" - 不止一次我对结果的不直观感到惊讶 .
在分析之后,即使其他算法的速度提高了几毫秒:
是与应用程序相关的性能差异?
代码更容易推理?
你能确保所有角落案件都被覆盖吗?
原始性能和简单设计之间的交易是我愿意花费大部分时间的 .
对于你的问题,我会使用@JonKiparsky的答案 . 他告诉你需要的任何东西:
你只需要理性地使用它:在这个delta你有304天,它是304/7 = 43整周和3天以上 . 因此,前3天(date_from 1和2)将被计为44,其他为43 .
它可能比2x2更容易!:
另外,不使用
Counter
将是:更正的答案:
从date_to中减去date_from以获得总天数 . 除以七来得到周数 - 显然是每周每天一周 . 然后添加任何剩余的工作日:
有一个计数器跟踪一周中的哪一天,从开始到结束日期一次一天 .
输出是: