您可以修改
zip_longest以支持常规可迭代项的用例。
from itertools import chain, repeatclass OuterZipStopIteration(Exception): passdef outer_zip(*args): count = len(args) - 1 def sentinel(default): nonlocal count if not count: raise OuterZipStopIteration count -= 1 yield default iters = [chain(p, sentinel(default), repeat(default)) for p, default in args] try: while iters: yield tuple(map(next, iters)) except OuterZipStopIteration: passprint(list(outer_zip( ("abcd", '!'), ("ef", '@'), (map(int, '345'), '$') )))


