如何让字符串引用同名列表?Python动态列表调用问题
动态创建列表后的引用问题
问题场景
我通过以下代码结合整数变量p动态创建新列表:
L = "" L = "player" + str(p) + "=[]" exec(L)
但无法通过变量直接引用这些动态创建的列表。比如当p=5时,会生成player5=[],但用playerp的方式无法访问——因为p不会被自动解析为对应数值。
示例代码及输出:
p=10 print(player10) M= "player" + str(p) print(M) print(M is player10)
输出:
[] player10 False
此时M是字符串"player10",而非指向列表player10的引用,请问该如何让M直接引用目标列表?
解决方案
方法1:通过命名空间字典获取变量
可以利用globals()(全局作用域)或locals()(局部作用域)字典来获取动态创建的变量。这两个函数会返回当前作用域的变量映射,键是变量名字符串,值是变量对应的对象:
p = 10 # 先执行动态创建列表的逻辑 exec(f"player{p}=[]") # 通过globals()获取目标列表 M = globals()[f"player{p}"] print(M) # 输出: [] print(M is player10) # 输出: True
如果是在函数内部创建的局部变量,将globals()替换为locals()即可。
方法2:用字典存储动态列表(更推荐)
使用exec动态生成变量容易导致命名混乱,且不利于代码维护。更稳妥的方式是用一个字典统一管理所有动态创建的列表:
# 初始化存储所有player列表的字典 players = {} p = 10 # 直接在字典中创建键值对 players[f"player{p}"] = [] # 通过字典键获取目标列表 M = players[f"player{p}"] print(M) # 输出: []
这种方式逻辑清晰,能避免变量名冲突,也更便于后续对这些列表进行统一管理。
内容的提问来源于stack exchange,提问作者Issac Chan
相关产品推荐
相关产品推荐

