在处理迭代器和可迭代对象时,理解它们的消耗性质至关重要。在Python中,迭代器只能被使用一次。这意味着一旦你迭代一个迭代器,它就会耗尽并且不能再次使用。
考虑以下代码:
def test(data): for row in data: print("first loop") for row in data: print("second loop")
如果 data 是一个非空迭代器(例如,列表迭代器或生成器表达式),代码将多次打印“第一个循环”,但永远不会打印“第二个循环”。这是因为迭代器在第一个循环期间已被消耗。
其他形式的迭代也会出现同样的问题,例如 list/set/dict 推导式、调用 list()、sum() 或 reduce () 等等。
但是,如果数据是另一个可迭代对象,例如列表或范围(它们是序列),则两个循环都将按预期执行,打印“第一个循环”并每个元素的“第二个循环”。这是因为这些可迭代对象可以迭代多次。
重申一下,在使用迭代器时,记住它们的单次消耗性质很重要。要重用数据,请考虑将元素保存到列表或使用 itertools.tee() 创建独立的迭代器。
以上是为什么我不能对迭代器进行两次迭代?的详细内容。更多信息请关注PHP中文网其他相关文章!