Python - 计算一个月内特定日期的频率

时间:2016-11-10 02:51:15

标签: python python-3.x calendar

我正在尝试计算特定月份内特定日期的频率。例如,本月(2016年11月),有4个星期一,5个星期二,5个星期三,4个星期四,4个星期五,4个星期六和4个星期日。

到目前为止,我已经完成了这项工作。

import calendar
from calendar import weekday, monthrange, SUNDAY
import datetime

now = datetime.datetime.now()

year, month = now.year, now.month

days = [weekday(year, month, d) for d in range(*monthrange(year, month))]

然而,当我试图打印多少时,例如本月的星期二,它给了我不正确的结果。

In  [1]: print(days.count(calendar.WEDNESDAY))
Out [1]: 4 # should be 5 instead of 4
In  [2]: print(days.count(calendar.TUESDAY))
Out [2]: 5 # this one is correct

如果我在Python中检查日历,它会向我显示正确的日历。

In  [4]: calendar.prmonth(year, month)

   November 2016
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

我的目标是计算给定月份内特定日期的频率。任何建议将不胜感激。非常感谢。

此致

Arnold A。

2 个答案:

答案 0 :(得分:1)

你有一个错误,范围从开始到结束1,你可以这样做:

[weekday(year, month, d) for d in range(1, monthrange(year, month)[1]+1)]

答案 1 :(得分:1)

range(start, stop)不包括停止,因为monthrange(year, month)返回(1, 30),范围将停在29。所以稍作更新:

>>> s, e = monthrange(year, month)
>>> days = [weekday(year, month, d) for d in range(s, e+1)]
>>> collections.Counter(days)
Counter({0: 4, 1: 5, 2: 5, 3: 4, 4: 4, 5: 4, 6: 4})