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

如何让字符串引用同名列表?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:19:52