weekdays in range
Ben Finney
ben+python at benfinney.id.au
Sun Oct 18 04:30:14 EDT 2009
Jive Dadson <notontheweb at noisp.com> writes:
> Ben Finney wrote:
> > >>> friday_weekday = 4
> > >>> len([
> > ... date for date in (
> > ... begin_date + datetime.timedelta(days)
> > ... for days in range((end_date - begin_date).days))
> > ... if calendar.weekday(date.year, date.month, date.day) <= friday_weekday])
> > 9
> >
>
> Thanks for your help. For a non-expert at Python, that last compound
> statement is pretty inscrutable. I am trying to scrute it. Wish me
> luck.
I'll help you by showing (liberally editing to make me look
reptrospectively clever) how I built it up:
>>> import datetime
>>> import calendar
>>> import pprint
>>> begin_date = datetime.date(2009, 10, 9)
>>> end_date = datetime.date(2009, 10, 22)
>>> end_date - begin_date
datetime.timedelta(13)
>>> (end_date - begin_date).days
13
>>> range((end_date - begin_date).days)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> begin_date + datetime.timedelta(0)
datetime.date(2009, 10, 9)
>>> begin_date + datetime.timedelta(1)
datetime.date(2009, 10, 10)
>>> (begin_date + datetime.timedelta(days)
... for days in range((end_date - begin_date).days))
<generator object at 0xf78c08f0>
>>> [
... date for date in (
... begin_date + datetime.timedelta(days)
... for days in range((end_date - begin_date).days))
... ]
[datetime.date(2009, 10, 9), datetime.date(2009, 10, 10), datetime.date(2009, 10, 11), datetime.date(2009, 10, 12), datetime.date(2009, 10, 13), datetime.date(2009, 10, 14), datetime.date(2009, 10, 15), datetime.date(2009, 10, 16), datetime.date(2009, 10, 17), datetime.date(2009, 10, 18), datetime.date(2009, 10, 19), datetime.date(2009, 10, 20), datetime.date(2009, 10, 21)]
>>> pprint.pprint([
... date for date in (
... begin_date + datetime.timedelta(days)
... for days in range((end_date - begin_date).days))
... ])
[datetime.date(2009, 10, 9),
datetime.date(2009, 10, 10),
datetime.date(2009, 10, 11),
datetime.date(2009, 10, 12),
datetime.date(2009, 10, 13),
datetime.date(2009, 10, 14),
datetime.date(2009, 10, 15),
datetime.date(2009, 10, 16),
datetime.date(2009, 10, 17),
datetime.date(2009, 10, 18),
datetime.date(2009, 10, 19),
datetime.date(2009, 10, 20),
datetime.date(2009, 10, 21)]
>>> len([
... date for date in (
... begin_date + datetime.timedelta(days)
... for days in range((end_date - begin_date).days))
... ])
13
>>> friday_weekday = 4
>>> calendar.weekday(begin_date.year, begin_date.month, begin_date.day)
4
>>> calendar.weekday(end_date.year, end_date.month, end_date.day)
3
>>> [
... date for date in (
... begin_date + datetime.timedelta(days)
... for days in range((end_date - begin_date).days))
... if calendar.weekday(date.year, date.month, date.day) <= friday_weekday]
[datetime.date(2009, 10, 9), datetime.date(2009, 10, 12), datetime.date(2009, 10, 13), datetime.date(2009, 10, 14), datetime.date(2009, 10, 15), datetime.date(2009, 10, 16), datetime.date(2009, 10, 19), datetime.date(2009, 10, 20), datetime.date(2009, 10, 21)]
>>> pprint.pprint([
... date for date in (
... begin_date + datetime.timedelta(days)
... for days in range((end_date - begin_date).days))
... if calendar.weekday(date.year, date.month, date.day) <= friday_weekday])
[datetime.date(2009, 10, 9),
datetime.date(2009, 10, 12),
datetime.date(2009, 10, 13),
datetime.date(2009, 10, 14),
datetime.date(2009, 10, 15),
datetime.date(2009, 10, 16),
datetime.date(2009, 10, 19),
datetime.date(2009, 10, 20),
datetime.date(2009, 10, 21)]
>>> len([
... date for date in (
... begin_date + datetime.timedelta(days)
... for days in range((end_date - begin_date).days))
... if calendar.weekday(date.year, date.month, date.day) <= friday_weekday])
9
--
\ “We are all agreed that your theory is crazy. The question that |
`\ divides us is whether it is crazy enough to have a chance of |
_o__) being correct.” —Niels Bohr (to Wolfgang Pauli), 1958 |
Ben Finney
More information about the Python-list
mailing list