У меня есть список генераторов в функции, 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='')
Мой вывод:
afhbgic
Когда должно быть:
afhbgicjdke
Как я могу заставить это игнорировать разряженный генератор? Я бы предпочел не использовать itertools и сохранить ту же структуру.