2016-11-10 81 views
0

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

到目前为止,这是我已经完成的工作。

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 

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

问候,

阿诺德A.

回答

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}) 
+0

感谢您的帮助!有用! – arnold

1

你有一个差一错误,范围经过从头到尾-1,你可以这样做,而不是:

[weekday(year, month, d) for d in range(1, monthrange(year, month)[1]+1)] 
相关问题