继续直到所有迭代器都完成 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
我无法使用 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