迭代yeardatescalendar重复日期

2024-06-26 17:59:50 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么输出中的某些日期会重复,有没有任何(干净的)方法来修改下面的脚本来修复它?我不想把输出放到一个列表中,然后找到唯一的日期或类似的东西。想知道循环本身是否可以修改。在

import calendar

c = calendar.Calendar()
for item in c.yeardatescalendar(2014):
    for i1 in item:
        for i2 in i1:
            for i3 in i2:
                if 'Fri' in i3.ctime():
                    print i3

以下是输出,请注意有些日期是重复的:

^{pr2}$

Tags: 方法inimport脚本列表forifitem
1条回答
网友
1楼 · 发布于 2024-06-26 17:59:50

这个问题源于这样一个事实:python的一个月/一年等的概念总是包含整整一周的时间。因此,2月份的名单实际上可能有1月份的日期,等等。事实上,2014年的名单中正好有2015年的一些日期。减轻这种情况的唯一方法是在另一个消除重复的数据结构中累积星期五。在

一个简单的方法是一套。集合是没有重复项但没有顺序的项的集合。如果您想了解更多信息,请查看python documentation。因此,我们将创建一组星期五,将其分类,然后打印出来,以获得所需的效果。在

代码如下:

import calendar

cal = calendar.Calendar()

fridays = set() # Constructs a new, empty set

# build a list of months, which are a list of weeks, etc.
months = [cal.monthdatescalendar(2014, month) for month in range(1, 13)]
for month in months:
    for week in month:
        for day in week:
            if day.weekday() == 4 and day.year == 2014:
                fridays.add(day)

for friday in sorted(fridays): # iterate through sorted fridays
    print friday

结果是:

^{pr2}$

相关问题 更多 >