Python zip():检查哪个迭代已耗尽

Kra*_*ken 5 python iterator generator python-3.x

在 Python 3 中,zip(*iterables)截至文档

返回元组的迭代器,其中第 i 个元组包含每个参数序列或可迭代对象中的第 i 个元素。当最短输入可迭代用完时,迭代器停止。

举个例子,我正在运行

for x in zip(a,b):
  f(x)
Run Code Online (Sandbox Code Playgroud)

有没有办法找出哪个迭代器ab导致 zip 迭代器停止?

假设这len()是不可靠的,并且迭代两者ab检查它们的长度是不可行的。

Kev*_*vin 0

我认为简有最好的答案。基本上,您想要单独处理 zip 的最后一次迭代。

import itertools as it

a = (x for x in range(5))
b = (x for x in range(3))

iterables = ((it.chain(g,[f"generator {i} was exhausted"]) for i,g in enumerate([a,b])))

for i, j in zip(*iterables):
    print(i, j)

# 0 0
# 1 1
# 2 2
# 3 generator 1 was exhausted
Run Code Online (Sandbox Code Playgroud)