在Python for循环中获取第一个和最后一个项
有没有一种优雅且符合Python风格的方法,可以在遍历生成器的for循环中捕捉到第一个和最后一个项目呢?
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
这段代码的目的是找出一个月结束时的那一周的第一天和最后一天。举个例子:对于六月,month-start应该是5/31/09。虽然从技术上讲,这一天是在五月,但它是六月开始时的那一周的第一天。
因为month-dates是一个生成器,所以我不能用切片的方式来获取最后一个元素。有没有更好的方法来处理这个问题呢?
4 个回答
10
这样怎么样呢?
for i, date in enumerate(month_dates):
if i == 0:
month_start = date
month_end = date
enumerate()
这个函数可以帮助你找到第一个元素,而 date
这个变量在循环结束后会给你最后一个元素。
11
Richie的想法很不错。更简单的做法是:
month_dates = cal.itermonthdates(year, month)
month_start = month_dates.next()
for month_end in month_dates: pass # bletcherous
11
我建议一开始就把它强制放进一个列表里:
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]
因为最多只有42天(包括前后的上下文),所以这样做对性能几乎没有影响。
而且,使用SUNDAY这个名字比直接用一个神秘的数字要好。