2016-08-10 3 views
1

Noob-Frage. Gibt es eine bessere Möglichkeit, einen Bereich auszudrücken, der sowohl Bereich als auch Kalender verwendet? Suchen Sie einen Druck einzurichten Wahr, wenn eine der Jahre in meinem Bereich Schaltjahre sindPython-Bereich und -Kalender verwenden, um nach Schaltjahren zu suchen

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' 

Antwort

1

Liste Comprehensions sind gut für diese

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

Wie sind Filter, wenn Sie die Karte bevorzugen/reduzieren/Filter Art und Weise, Dinge zu tun

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

erstere bevorzugt werden sollten, es sei denn, Sie haben guten Grund filter zu verwenden (Hinweis: Sie wahrscheinlich nicht)

N.B. Das gibt Ihnen, welche Jahre Schaltjahre sind (falls vorhanden), anstatt einen booleschen Wert "Es gibt Schaltjahre" oder "Es gibt keine Schaltjahre". Für eine boolesche Antwort siehe fugledes excellent answer using any.

+1

dies auch interessant wäre: 'leap_years = any (calendar.isleap (Jahr) für Jahr in Bereich (2016, 2036))' 'da es gibt true' als die OP –

+1

erwähnt können Sie auch das bekommen 'bool (leap_years)' für eine boolesche Antwort, da leere Listen False zurückgeben, während Listen mit Elementen True zurückgeben. –

4

Es klingt, als ob Sie die eingebaute Python any verwenden möchten;

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 
Verwandte Themen