如果最右边的迭代器没有被消耗,我想要一个类似 zip 的函数。它应该屈服直到失败。
例如
>>> a = ['a', 'b', 'c']
>>> b = [1, 2, 3, 4]
>>> myzip(a, b)
Traceback (most recent call last):
...
ValueError: rightmost iterable was not consumed
>>> list(myzip(b, a))
[(1, 'a'), (2, 'b'), (3, 'c')]
也许标准库中有一个函数可以帮助解决这个问题?
重要的提示:
在真实的上下文中,迭代器不是在对象上,所以我不能只检查长度或索引它们。
编辑:
这是我到目前为止想出的
def myzip(*iterables):
iters = [iter(i) for i in iterables]
zipped = zip(*iters)
try:
next(iters[-1])
raise ValueError('rightmost iterable was not consumed')
except StopIteration:
return zipped
这是最好的解决方案吗?它不会保持迭代器的状态,因为我调用了它的 next,这可能是一个问题。
慕的地6264312
GCT1015
相关分类