Если у меня есть несколько итераций в качестве аргумента, и есть ли способ сохранить выполнение кода после того, как один из списков вызовет StopIteration?
Я не могу использовать какие-либо нарезки, len () или любые itertools.
Это то, что я пробовал до сих пор, и я знаю, что это совершенно неправильно, но я просто не могу понять это.
def together(*args):
iterator = [iter(item) for item in args]
my_list = []
while True:
for i in iterator:
try:
lst.append(next(i))
print(next(i))
except StopIteration:
return
if '__next__' == None:
yield tuple(None)
else:
yield tuple(my_list)
my_list = []
Вот мой текущий результат, он действительно хранит b, gЯ только печатал первый список:
[('a', 'f', 'h')]
Каков наилучший способ получить такой результат?Resutls - это кортежи в списке, и когда аргументы итераций заканчиваются, они заменяются на Nones.
[('a', 'f', 'h'), ('b', 'g', 'i'), ('c', None, 'j'), ('d', None, 'k'), ('e', None, None)]
Я знаю, что ошибка StopIteration возникает после ('b', 'g', 'i'), но есть ли способ игнорировать и продолжать работать с другим списком?
И ввод выглядит так:
[v for v in together(disguise('abcde'), disguise('fg'), disguise('hijk'))]
Функция маскировки выглядит так:
def disguise(items):
for v in items:
yield v
Любойпредложение или помощь будут оценены!