如何修改嵌套For循环输出,匹配fill_values实现指定格式?
修改循环代码实现指定格式输出
问题描述
我有一组用于填充缺失值的数据集:
In [1]: sex_class = ['female','male'] pclass = [1,2,3] fill_values = [34,40,29,18,24,25] In [2]: for i in pclass: for j in sex_class: print(i,j) Out[2]: 1 female 1 male 2 female 2 male 3 female 3 male
需要修改代码,让输出呈现为以下指定格式:
1 female 34 1 male 40 2 female 29 2 male 18 3 female 24 3 male 25
解决方案
方法1:使用索引计数器
引入一个索引变量,在每次循环中取出对应fill_values元素,同时用字符串格式化实现文本对齐:
sex_class = ['female','male'] pclass = [1,2,3] fill_values = [34,40,29,18,24,25] idx = 0 for i in pclass: for j in sex_class: # 左对齐第二列,固定宽度6个字符,保证male和female对齐 print(f"{i} {j:<6} {fill_values[idx]}") idx += 1
方法2:先构建配对组合再遍历
先把pclass和sex_class的所有组合与fill_values配对,再循环输出,逻辑更直观:
sex_class = ['female','male'] pclass = [1,2,3] fill_values = [34,40,29,18,24,25] # 生成所有(pclass, sex)组合 combinations = [] for cls in pclass: for sex in sex_class: combinations.append((cls, sex)) # 组合对应的值并输出 for (cls, sex), val in zip(combinations, fill_values): print(f"{cls} {sex:<6} {val}")
方法3:用itertools.product简化组合生成
借助itertools.product可以快速生成pclass和sex_class的笛卡尔积,代码更简洁:
from itertools import product sex_class = ['female','male'] pclass = [1,2,3] fill_values = [34,40,29,18,24,25] for (cls, sex), val in zip(product(pclass, sex_class), fill_values): print(f"{cls} {sex:<6} {val}")
内容的提问来源于stack exchange,提问作者Armando Bridena
相关产品推荐
相关产品推荐

