使用Python范围和日历来检查闰年

时间:2016-08-10 15:24:31

标签: python python-2.7

Noob问题。是否有更理想的方式来使用范围和日历表达范围。想要设置打印如果我的范围中的任何年份都是闰年,则为真

year =  calendar.isleap(range(2016,2036))



Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/calendar.py", line 99, in isleap
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
TypeError: unsupported operand type(s) for %: 'list' and 'int'

3 个答案:

答案 0 :(得分:4)

听起来你想要使用内置的Python any;

In [1]: import calendar

In [2]: test1 = any(calendar.isleap(y) for y in range(2016, 2036))

In [3]: test2 = any(calendar.isleap(y) for y in range(2097, 2103))

In [4]: print(test1)
True

In [5]: print(test2)
False

答案 1 :(得分:1)

列表理解对此有好处

leap_years = [year for year in range(2016, 2036) if calendar.isleap(year)]

过滤器,如果您更喜欢map / reduce / filter的做事方式

leap_years = filter(calendar.isleap, range(2016, 2036))

除非你有充分的理由使用filter(提示:你可能不会),否则应该首选前者

N.B。这会给你哪些年份是闰年(如果有的话),而不是布尔数&#34;有闰年&#34;或者&#34;没有闰年。&#34;请参阅fuglede的excellent answer using any以获取布尔响应。

答案 2 :(得分:1)

一种pythonic方式

>>> import calendar
>>> any(map(calendar.isleap, range(2016, 2036)))
True