Jive Dadson <notonthe...@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 -- http://mail.python.org/mailman/listinfo/python-list