Is there an elegant and pythonic way to trap the first and last item in a for loop which is iterating over a generator?
from calendar import Calendar cal = Calendar(6) month_dates = cal.itermonthdates(year, month) for date in month_dates: if (is first item): # this is fake month_start = date if (is last item): # so is this month_end = date
This code is attempting to get the first day of the week the month ends on, and the last day of the week the month ends on. Example: for June, month-start should evaluate to 5/31/09. Even though it's technically a day in May, it's the first day of the week that June begins on.
Month-dates is a generator so i can't do the [:-1] thing. What's a better way to handle this?
I would just force it into a list at the beginning:
from calendar import Calendar, SUNDAY cal = Calendar(SUNDAY) month_dates = list(cal.itermonthdates(year, month)) month_start = month_dates month_end = month_dates[-1]
Since there can only be 42 days (counting leading and tailing context), this has negligible performance impact.
Also, using SUNDAY is better than a magic number.