Python中如何通过拼接整数与字符串调用目标变量?含矩阵元素访问场景
动态访问变量/矩阵的解决方案
嘿,你遇到的这两个问题本质上是同一个——想通过字符串拼接出来的名字直接访问变量对吧?这在Python里是个常见误区,直接生成变量名字符串是拿不到对应变量值的,最规范也最安全的解决方式是用字典,下面我分别给你拆解两个场景的处理方法:
一、基础变量场景:动态获取变量值
你原来的代码里,'P%s'%(int(i))只是生成了字符串"P2",它和变量P2完全是两回事,自然打印不出34。
推荐方案:用字典存储变量
把你的变量放进字典里,用字符串形式的变量名做键,这样就能通过拼接出来的字符串去取值了:
i = 2 # 用字典统一管理你的变量 var_store = {'P2': 34} # 用f-string拼接键名,直接从字典取值 M = var_store[f'P{i}'] print(M) # 输出34 print(var_store['P2']) # 输出34
备选方案(不推荐):用globals()/locals()
如果你实在不想改现有变量的存储方式,可以通过globals()(全局变量字典)或者locals()(局部变量字典)来取值,但这种方式风险很高——比如不小心覆盖全局变量、代码可读性差,所以尽量不用:
i = 2 P2 = 34 M = globals()[f'P{i}'] print(M) # 输出34
二、矩阵访问场景:遍历动态命名的矩阵
没错!你猜的很对,这还是因为没用到字典导致的问题。原来的代码里M是字符串"P0"(注意你循环里p从0开始,但你的矩阵是P1-P3,这里还会有索引不匹配的问题),字符串当然不能用M[i,j]去访问元素。
推荐方案:用字典存储矩阵
把所有矩阵放进字典,遍历的时候通过拼接的键名取出对应矩阵,再访问元素:
# 先定义好你的三个矩阵(这里用列表模拟,numpy矩阵同理) P1 = [[1,2,3],[4,5,6],[7,8,9]] P2 = [[10,11,12],[13,14,15],[16,17,18]] P3 = [[19,20,21],[22,23,24],[25,26,27]] # 把矩阵存入字典,键是矩阵的名字字符串 matrix_store = {'P1': P1, 'P2': P2, 'P3': P3} # 注意循环要从1到3,对应P1-P3 for p in range(1, 4): current_matrix = matrix_store[f'P{p}'] for i in range(3): for j in range(3): # 如果是列表矩阵用[i][j],numpy矩阵可以用[i,j] print(current_matrix[i][j])
这样就能顺利遍历每个矩阵的所有元素啦~
总结
Python不推荐直接通过字符串去引用变量名,用字典来统一管理这类需要动态访问的变量/矩阵,不仅代码可读性更强,还能避免变量名冲突、误操作全局变量等潜在问题,是这类场景的最佳实践。
内容的提问来源于stack exchange,提问作者Jella
相关产品推荐
相关产品推荐

