确定连续的日期

发布于 2021-01-29 16:31:56

我有一个清单,datetime.dates我需要检查每个日期是否都来自下一个连续月份。

希望清楚代码中的含义:

import datetime
from unittest import TestCase


def is_consecutive(dates):
    # TODO
    return


class DatesTestCase(TestCase):
    def test_consecutive(self):
        self.assertTrue(is_consecutive([datetime.date(2010, 10, 3),
                                        datetime.date(2010, 11, 8),
                                        datetime.date(2010, 12, 1),
                                        datetime.date(2011, 01, 11)]))

    def test_not_consecutive(self):
        self.assertFalse(is_consecutive([datetime.date(2010, 7, 6),
                                         datetime.date(2010, 8, 24),
                                         datetime.date(2010, 3, 5),
                                         datetime.date(2010, 10, 25)]))

        self.assertFalse(is_consecutive([datetime.date(2010, 10, 6),
                                         datetime.date(2010, 11, 2),
                                         datetime.date(2010, 12, 9),
                                         datetime.date(2010, 01, 20)]))

您将如何实施is_consecutive

非常感谢您的任何帮助(建议,提示,代码或任何有用的信息)!

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    循环浏览列表中除最后一项以外的所有项,并将其与下一项进行比较。如果第二个月的月份正好比第一个月的月份大一个,或者第二秒的月份为1且第二年的年份恰好大于第一个月的月份,则两个项是连续的。返回False在第一次失败,否则返回True底。

    编辑:在第二种情况下,除了第二个月是1,显然第一个月必须是12。

    编辑2:在第一种情况下,显然年份应该相同。那就是你写得太快所得到的。

    情人:

    #!/usr/bin/python
    
    from datetime import date
    
    def is_consecutive(datelist):
        for idx, my_date in enumerate(datelist[:-1]):
            if ((datelist[idx + 1].month - my_date.month == 1 and
                 datelist[idx + 1].year == my_date.year) or
                (datelist[idx + 1].month == 1 and
                 my_date.month == 12 and
                 datelist[idx + 1].year - my_date.year == 1)):
                continue
            else:
                return False
        return True
    
    print is_consecutive([date(2010, 10, 3),
                          date(2010, 11, 8),
                          date(2010, 12, 1),
                          date(2011, 1, 11)])
    
    print is_consecutive([date(2010, 7, 6),
                          date(2010, 8, 24),
                          date(2010, 3, 5),
                          date(2010, 10, 25)])
    

    一种替代的实现,可能更容易遵循,但基本上可以做同样的事情:

    def is_consecutive(datelist):
        for idx, my_date in enumerate(datelist[:-1]):
            month_diff = datelist[idx + 1].month - my_date.month
            year_diff = datelist[idx + 1].year - my_date.year
            if ((month_diff == 1 and year_diff == 0) or
                (month_diff == -11 and year_diff == 1)):
                continue
            else:
                return False
        return True
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看