如何使用查找表在Python中填充N×N矩阵
用Python实现基于查找表的矩阵填充(替代VBA双重循环)
嘿,我懂你习惯用VBA的双重循环搞矩阵填充,刚转Python确实有点懵。其实Python里用字典来做查找表会比循环高效很多,咱们一步步来实现你要的效果:
第一步:把查找表转成Python字典
先把你给的查找表转换成键值对形式,键用(姓名, 科目)这样的元组,对应的值就是要填充的符号,这样查起来一找一个准:
# 定义查找表字典 lookup_table = { ("John", "Maths"): "X", ("John", "Science"): "Y", ("John", "English"): "XX", ("Anne", "Maths"): "MM", ("Anne", "Science"): "X", ("Anne", "English"): "YY", ("Ryan", "Maths"): "M", ("Ryan", "Science"): "XX", ("Ryan", "English"): "YYAX" }
第二步:定义模板里的内容
把你给的模板拆成名字列表和班级科目列表,方便后续处理:
# 第一行的姓名表头 names = ["John", "Anne", "Ryan"] # 后续的班级+科目行数据 class_subjects = [ ("Class A", "Maths"), ("Class B", "Maths"), ("Class C", "Science"), ("Class D", "Science"), ("Class E", "English"), ("Class F", "English") ]
第三步:生成最终输出
不用嵌套循环硬找,直接用字典的快速查找功能生成结果:
# 先打印表头分隔线和姓名行 print("-------- --------------") print("\t".join(names)) # 遍历每个班级科目行,生成对应填充值 for class_name, subject in class_subjects: # 为每个姓名查找对应科目的值 fill_values = [lookup_table[(name, subject)] for name in names] # 拼接成符合格式的行并打印 output_row = f"{class_name} {subject}\t" + "\t".join(fill_values) print(output_row)
运行结果
运行上面的代码,就能得到你期望的输出:
John Anne Ryan
Class A Maths X MM M
Class B Maths X MM M
Class C Science Y X XX
Class D Science Y X XX
Class E English XX YY YYAX
Class F English XX YY YYAX
要是以后数据量更大,这种字典查找的方式可比双重循环高效多了,代码也更简洁好维护~
内容的提问来源于stack exchange,提问作者Remi
相关产品推荐
相关产品推荐

