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

Access the name of a list in a Python print statement

我正在运行python 3.6和pandas 0.19.2,希望访问以下列表的名称:

1
2
3
4
5
6
7
# 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的工作"。但是:当我运行代码时,会出现以下错误:

1
TypeError: must be str, not list

这是完全有道理的(列表毕竟不是字符串),但是有没有任何方法可以将列表的名称作为字符串("list1")获取?我知道我可以用听写代替(这是我现在正在做的),但我仍然感兴趣。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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'


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

1
2
3
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'

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


有许多选项,其中一个是repr(list)