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

如何使用查找表在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:42:30