itertools.permutations导出CSV异常:仅获取单个排列数据
问题原因及解决方法
问题根源
你代码里的itertools.permutations返回的是迭代器,迭代器只能被遍历一次。而且循环结束后,eachpermutation变量仅保留了最后一次循环的4元组,生成DataFrame时会把这个元组的每个元素拆成单独的行,自然只导出了最后一组排列数据。
正确解决方法
方法1:直接传入迭代器(高效省内存)
无需提前循环打印,直接把排列迭代器传给pd.DataFrame(),它会自动处理所有排列,每个排列对应一行:
import itertools import pandas as pd x = range(69,89) # 生成排列迭代器 array = itertools.permutations(x, 4) # 用迭代器创建DataFrame,每个排列作为一行 df = pd.DataFrame(array) # 导出CSV,index=False避免生成多余的索引列 df.to_csv("permutations.csv", index=False)
方法2:转成列表再处理(直观易调试)
如果需要先查看排列内容,可以先把迭代器转为列表,再创建DataFrame:
import itertools import pandas as pd x = range(69,89) # 把迭代器转为列表,保存所有排列 permutations_list = list(itertools.permutations(x, 4)) # 打印查看排列(可选操作) for p in permutations_list: print(p) # 用列表创建DataFrame df = pd.DataFrame(permutations_list) df.to_csv("permutations.csv", index=False)
补充说明
- 20个数取4个的排列总共有
20×19×18×17=116280行,导出的CSV会完整包含所有数据。 - 导出时添加
index=False可以避免CSV中多出一列默认序号,按需选择即可。
内容的提问来源于stack exchange,提问作者topo
相关产品推荐
相关产品推荐

