在 Python 打印语句中访问列表的名称

新手上路,请多包涵

我正在运行 Python 3.6 和 Pandas 0.19.2,并希望按如下方式访问列表的名称:

 # work on the following two lists
for list in [list1, list2]:
    # loop through items in each list
    for entry in bucket_set:
        # do stuff
    # let user know I finished working on list x
    print('i just finished working on: '+list)

在第一次迭代中,这应该做一些事情然后打印出来:“我刚刚完成了 list1 的工作”。但是:当我运行我的代码时,出现以下错误:

 TypeError: must be str, not list

这是完全有道理的(列表毕竟不是字符串),但是 有什么方法可以将列表的名称作为字符串(’list1’)? 我知道我可以改用字典(这就是我现在正在做的),但我还是很感兴趣。

原文由 Martin Reindl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
2 个回答

您可以创建一个类来通常封装一个名称,但是当字典就足够时,这是一个很大的开销。

 class NamedObject:
    def __init__(self, name, obj):
        self.name = name
        self.obj = obj

    def __getattr__(self, attr):
        if attr == 'name':
            return self.name
        else:
            return getattr(self.obj, attr)

unnamed_list = [1, 2, 3]
named_list = NamedObject('named_list', unnamed_list)

print(named_list) # [1, 2, 3]
print(named_list.name) # 'named_list'

原文由 Jared Goguen 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以创建类或字典,也可以迭代变量。

 my_list = [1,2]
my_var_name = [k for k,v in locals().items() if v == my_list][0]
print(my_var_name)

它给出了 'my_list'

请注意,列表值必须是唯一的!

原文由 Daniel Malachov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题