问题描述
是否可以将指定月份和年份中出现频率最高的星期几打印为字符串。像Monday
和Tuesday
一样,如果有多天,则应该显示第一天。
首先,我尝试检查datetime
的输出,但无法找到日历模块以将其作为日输出。
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)
我试图使用calendar.itermonthdays
来获取所需的迭代器,以使用该迭代器来显示“星期一”,“星期二”之类的日期。但是只有这样
[datetime.date(2020,2,24),datetime.date(2020,25),26),27),28),29),3,1)]
解决方法
您可以为此使用collections.Counter
。您可以调用给定年份和月份的日历itermonthdates
,然后使用Counter
的{{1}}格式说明符创建工作日名称的'%A'
。
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)
,
Noob编码器:
我试图解决完全相同的问题。我想出了这个解决方案,它可以工作。
import calendar
import collections.defaultdict as dd
days_count = dd(int)
obj = calendar.Calendar()
days = [x for x in obj.itermonthdays2(year,month)]
for day in days:
if day[0] != 0: #these are empty days in a monthly calendar
days_count[day[1]] += 1
max_day = max(days_count,key=days_count.get)
这将给出一个整数值(0 =星期一,1 =星期二,... 6 =星期日)。 您可以使用函数或字典将整数转换为工作日的字符串表示形式。
仅供参考:如果出现的工作日多于一个,则此解决方案可以提供第一个工作日
,我相信这应该有效。 无论哪一天出现在 29 日,一个月内都会出现 5 次,并且是第一个。 在闰年的情况下,所有的日子都会出现 4 次,所以星期一应该是一周的第一天。
import datetime
try:
print(datetime.date(year, month,29).strftime('%A'))
except ValueError:
print("Monday")
,
您只需输入该月29日到31日之间任何有效日期的日期名称即可。如果这些都不是有效日期,请停止尝试。
import datetime
def get_most_common_days(year,month):
days = []
for daynum in range(29,32):
try:
days.append(datetime.date(year,month,daynum).strftime('%A'))
except ValueError:
break
return days
print(get_most_common_days(2020,8))
这给
['Saturday','Sunday','Monday']
2020年8月最常见的日子。这些日子发生了5次。未列出的日期发生4次。
,这是我的答案,似乎很有效-
import calendar
from collections import Counter
obj = calendar.Calendar()
my_list1 = []
for i in obj.itermonthdays2(year,month):
if i[0] == 0:
pass
else:
my_list1.append(str(i[1]))
int_values = []
for i in my_list1:
int_values.append(int(i))
num = Counter(int_values)
num = num.most_common(1)[0][0]
if num == 0:
print("Monday")
if num == 1:
print("Tuesday")
if num == 2:
print("Wednesday")
if num == 3:
print("Thursday")
if num == 4:
print("Friday")
if num == 5:
print("Saturday")
if num == 6:
print("Sunday")
结尾部分有点长,但我找不到任何方法可以克服它。
,我想您应该考虑使用熊猫来重复出现多个值
import pandas as pd
List = [2,1,2,3,1]
# Create a panda DataFrame using the list
df=pd.DataFrame({'Number': List})
# Creating a new dataframe to store the values with appropriate column name
# value_counts() returns the count based on the grouped column values
df1 = pd.DataFrame(data=df['Number'].value_counts(),columns=[['Number','Count']])
# The values in the List become the index of the new dataframe.Setting these index as a column
df1['Count']=df1['Number'].index
# Fetch the list of frequently repeated columns
list(df1[df1['Number']==df1.Number.max()]['Count'])
输出
[2,1]
在您的方案中使用此示例!