小编new*_*r11的帖子

一旦发电机列表中的发电机耗尽,是否继续使用其他发电机?

我在一个函数中有一个生成器列表alternate_all(*args),该函数在列表中的每个生成器之间交替打印它们的第一个项目、第二个项目……等等,直到所有生成器都用完。

我的代码一直工作,直到生成器耗尽,一旦发生 StopIteration,当我希望它继续使用其余生成器并忽略耗尽的生成器时,它就会停止打印:

def alternate_all(*args):
    iter_list = []
    for iterable in args:
        iter_list.append(iter(iterable))
    try:
        while True:
            for iterable in iter_list:
                val = next(iter_list[0])
                iter_list.append(iter_list.pop(0))
                yield val
    except StopIteration:
        pass

            
if __name__ == '__main__':
    for i in alternate_all('abcde','fg','hijk'):
        print(i,end='')
Run Code Online (Sandbox Code Playgroud)

我的输出是:

afhbgic
Run Code Online (Sandbox Code Playgroud)

什么时候应该是:

afhbgicjdke
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它忽略耗尽的发电机?我不想使用 itertools 并保持相同的结构。

python generator

5
推荐指数
1
解决办法
407
查看次数

标签 统计

generator ×1

python ×1