Python 如何反复迭代列表?

Python 如何反复迭代列表?,python,loops,Python,Loops,我正在尝试编写一个函数,它将使用Python返回一系列月份名称 例如,如果我把: gen = next_month('October') lst = [next(gen) for i in range(15)] print (lst) 我应该得到: ['November', 'December', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October',

我正在尝试编写一个函数,它将使用Python返回一系列月份名称

例如,如果我把:

gen = next_month('October')
lst = [next(gen) for i in range(15)]
print (lst)
我应该得到:

['November', 'December', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',  'September', 'October', 'November', 'December', 'January'])
但我用以下代码得到索引超出范围错误:

month_names = ['January', 'February', 'March', 'April', 'May', 'June',
                'July', 'August', 'September', 'October', 'November', 'December']

def next_month(name: str) -> str:
    "Return a stream of the following months"
    global month_names
    month_index = month_names.index(name)
    while True:
            yield (month_names[month_index])
            month_index = month_index + 1

只是不知道如何修复它。提前感谢您的指导

itertools有一个函数
cycle
,它循环一个迭代器:

from itertools import cycle

month_names = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

for month in cycle(month_names):
    print(month)
作业版:

def gen_cycle(l):
    cnt = 0
    while True:
        yield l[cnt]
        cnt = (cnt+1)%len(l)

对于家庭作业答案来说可能不太好,但如果不进行硬编码,您可以使用
itertools.count
datetime.datetime

def next_month(name):
    date = datetime.strptime(name, '%B')
    for m in count(date.month):
        date = date.replace(month=1+(m%12))
        yield date.strftime('%B')

gen = next_month('October')
print([next(gen) for i in range(15)])
这张照片是:

['November', 'December', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'January']

这也可以使用while循环完成,尽管使用计数是一个快捷方式

。请考虑格式化您添加到问题中的代码段。它可能会帮助其他人清楚地看到这个问题,并尝试帮助您解决问题。谢谢!很抱歉,我遗漏了我需要为此编写一个生成器,并且不能真正使用任何导入工具…更新了,但复制SO的内容是无法通过考试的。谢谢你的帮助。我不会复制任何东西,我也不会。我花了很多时间试图弄明白这一点,只是想从专家那里得到一些指导。但我应该说得更明确些。我试着去学习和理解事物,而不是照搬过去。再次感谢你。祝你旅途好运。