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'
答案 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