Python如何获取嵌套列表中存储的子列表对应的原变量名?
这个需求可以实现,但你原本的写法无法直接达成,原因是Python中的列表存储的是元素对象的内存引用,不会保留变量名这类标识信息,变量名本身只是绑定对象的临时标签,存入列表后就和原名称脱离关联了。
方案1:使用字典存储(最推荐)
把变量名作为键,对应列表作为值,既可以保留名称标识,也能正常存取列表内容:
area = ["A","B","C"] level = ["L1","L2","L3"] sector = { "area": area, "level": level } # 输出所有嵌套列表内容,和你原来的输出逻辑对应 print(list(sector.values())) # 输出第二个元素对应的变量名,也就是你要的 level print(list(sector.keys())[1]) # 如果要取对应列表内容,调用 sector["level"] 即可
方案2:用列表嵌套元组存储
如果你一定要保持列表的顺序索引特性,可以把名称和列表打包成元组存入:
area = ["A","B","C"] level = ["L1","L2","L3"] sector = [("area", area), ("level", level)] # 第一次输出和你原需求的嵌套列表结果一致 print([item[1] for item in sector]) # 第二次输出对应的变量名 level print(sector[1][0]) # 取对应列表内容调用 sector[1][1] 即可
不推荐的硬取变量名方案
如果你不想修改原有存储结构,可以通过遍历全局变量匹配对象的方式获取变量名,但该方案非常不稳定,存在多个变量指向同一个列表时会返回错误结果、作用域变更后失效等问题,仅做参考:
area = ["A","B","C"] level = ["L1","L2","L3"] sector = [area, level] def get_var_name(obj): for name, val in globals().items(): if val is obj: return name print(sector) print(get_var_name(sector[1]))
内容的提问来源于stack exchange,提问作者d2907
相关产品推荐
相关产品推荐

