首页 > 解决方案 > Python zip():检查哪个迭代器用尽了

问题描述

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

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

例如,我正在运行

for x in zip(a,b):
  f(x)

有没有办法找出哪些迭代器,a或者b,导致了 zip 迭代器的停止?

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

标签: pythonpython-3.xiteratorgenerator

解决方案


我认为 Jan 有最好的答案。基本上,您想分别处理来自 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

推荐阅读