继续直到所有迭代器都完成 Python

Continue until all iterators are done Python

我无法使用 itertools

所以编码看起来很简单,但是我在想保持生成器 运行 直到所有迭代都被完全处理之前的算法时遇到了麻烦。

函数的想法是像这样将 2 个可迭代对象作为参数...

(['a', 'b', 'c', 'd', 'e'], [1,2,5])

它所做的就是产生这些值...

a, b, b, c, c, c, c, c

但是,如果第二个可迭代对象首先用完了元素,该函数只会迭代剩余的值一次...

所以剩余的值将像这样迭代:

d, e

def iteration(letters, numbers):
    times = 0
    for x,y in zip(letters, numbers):
        try:
            for z in range(y):
                yield x
        except:
            continue

[print(x) for x in iteration(['a', 'b', 'c', 'd'], [1,2,3])]

我很难忽略第一个 StopIteration 并继续完成。

阅读 zip() 的文档。它说: "zip() should only be used with unequal length inputs when you don’t care about trailing, unmatched values from the longer iterables. If those values are important, use itertools.zip_longest() instead."

为下一个使用默认值 1,以便至少打印一次字母:

def iteration(letters, numbers): 
     # create iterator from numbers
    it = iter(numbers)
    # get every letter
    for x in letters:
        # either print in range passed or default range of 1
        for z in range(next(it, 1)):
            yield x

输出:

In [60]: for s in iteration(['a', 'b', 'c', 'd', 'e'], [1,2,5]):
   ....:     print(s)
   ....:     
a
b
b
c
c
c
c
c
d
e