【发布时间】:2011-07-04 21:24:14
【问题描述】:
我在 python 中做了一件非常简单的事情:
从今天开始(包括),我需要最近 x 个月的元组列表 (year,month)。因此,对于 x=10 和今天(2011 年 7 月),该命令应输出:
[(2011, 7), (2011, 6), (2011, 5), (2011, 4), (2011, 3),
(2011, 2), (2011, 1), (2010, 12), (2010, 11), (2010, 10)]
只应使用 python 的默认日期时间实现。我想出了以下解决方案:
import datetime
[(d.year, d.month) for d in [datetime.date.today()-datetime.timedelta(weeks=4*i) for i in range(0,10)]]
这个解决方案为我的测试用例输出了正确的解决方案,但我对这个解决方案并不满意:它假设一个月有四个星期,这根本不正确。我可以将weeks=4 替换为days=30,这将是一个更好的解决方案,但它仍然不正确。
我想到的另一个解决方案是使用简单的数学并从月份计数器中减去 1,如果月份计数器为 0,则从年份计数器中减去 1。这个解决方案的问题:它需要更多的代码,而且可读性也不是很好。
那么如何才能正确地做到这一点呢?
【问题讨论】:
-
仅供参考,如果您在 7 月 31 日运行此代码,
weeks=4和days=30都会失败。 -
谢谢,这是我的代码不起作用的最简单的边界情况。如果你使用
days=31,你可以让它为那些人工作,但它仍然不正确。