Get the first and last item in a python for the loop


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[0]
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.