You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何打印操作会导致itertools.pairwise生成的迭代器失效?

为什么取消注释print语句后循环不再工作?

你的代码如下:

import pandas as pd
import itertools as it

data={
    'X': [1, 2, 3, 4, 5,6,7,8,9,10],
    'Y': [5, 4, 3, 2, 1,2,3,4,5,5],
    'Cat':["cat","dog",None,None,"dog","dog",None,None,"cat","dog"  ]
}
df = pd.DataFrame(data)
x_pairs = it.pairwise(df['X'])
y_pairs = it.pairwise(df['Y'])

# print(list(x_pairs))  #<--Uncomment this
# print(list(y_pairs))

for x, y in zip(x_pairs, y_pairs):
  print("x",x,"y",y)

问题出在**itertools.pairwise返回的是迭代器**,迭代器有个核心特性:只能被遍历一次,遍历完之后就没有剩余元素了。

  • 当你取消注释print(list(x_pairs))时,list()会把x_pairs里的所有元素一次性取出来转换成列表,这时候x_pairs这个迭代器就被彻底耗尽了,里面再也没有元素。
  • 同理print(list(y_pairs))也会把y_pairs的元素全部取完,让它变成空迭代器。
  • 后面的zip(x_pairs, y_pairs)去遍历两个空迭代器,自然没有任何元素可以循环,所以循环就不工作了。

如果想要既打印内容又能正常执行后续循环,你可以提前把迭代器转换成列表保存:

import pandas as pd
import itertools as it

data={
    'X': [1, 2, 3, 4, 5,6,7,8,9,10],
    'Y': [5, 4, 3, 2, 1,2,3,4,5,5],
    'Cat':["cat","dog",None,None,"dog","dog",None,None,"cat","dog"  ]
}
df = pd.DataFrame(data)
# 直接转换成列表保存
x_pairs = list(it.pairwise(df['X']))
y_pairs = list(it.pairwise(df['Y']))

print(x_pairs)
print(y_pairs)

for x, y in zip(x_pairs, y_pairs):
  print("x",x,"y",y)

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:37:35