Is there a way to print the day of the week which appears most frequent in the specified month and year as a string. Like Monday
and Tuesday
and if there are any multiple days, the first one should be displayed.
First I tried to check with the datetime
output but unable to find the calendar module to get this as day output.
import calendar def usingcalendar(datetuple): l = [] dt=list(datetuple) obj = calendar.Calendar() for day in obj.itermonthdates(dt[0], dt[1]): l.append(day) rev = l[:-8:-1] rev.reverse() print(rev)
I was trying to use calendar.itermonthdays
to get the required iterator to use that to display days like ‘Monday’, Tuesday’. But only came up to this
[datetime.date(2020, 2, 24), datetime.date(2020, 2, 25), datetime.date(2020, 2, 26), datetime.date(2020, 2, 27), datetime.date(2020, 2, 28), datetime.date(2020, 2, 29), datetime.date(2020, 3, 1)]
Advertisement
Answer
You can use collections.Counter
for this. You can call the calendar’s itermonthdates
for a given year and month, then create a Counter
of the weekday names using the '%A'
format specifier of datetime
.
import calendar from collections import Counter cal = calendar.Calendar() year = 2020 month = 1 count = Counter(d.strftime('%A') for d in cal.itermonthdates(year, month) if d.month==month)
Then for example
>>> count Counter({'Wednesday': 5, 'Thursday': 5, 'Friday': 5, 'Saturday': 4, 'Sunday': 4, 'Monday': 4, 'Tuesday': 4}) >>> count.most_common(1) [('Wednesday', 5)]