在Python for循环中获取第一个和最后一个项

8 投票
4 回答
15148 浏览
提问于 2025-04-15 12:13

有没有一种优雅且符合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这个名字比直接用一个神秘的数字要好。

撰写回答