2016-11-10 206 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)] 
相關問題