我不确定这是否可以通过简单的方式实现,但我正在尝试获取列表对象的名称。
我确实尝试使用__name__
但是我收到错误,因为列表对象没有属性__name__
甚至可以获取列表的变量名,而不是列表对象的子类并添加__name__
属性?
EDIT 这与建议的副本无关。
这是我的情景:
cucumbers=[]
oranges=[]
salads=[]
...
masterlist=[cucumbers, oranges, salads]
有时我只得到2个列表,我得到5个,所以主列表每次都有不同数量的列表;当我打印它时,我只获得了值;所以我不知道第一个清单是黄瓜,橙子,沙拉还是其他任何东西。
我正在尝试查询列表,因此我可以获取variable name
,而不是对象的类型。所以print masterlist[1].name
会给我“黄瓜”或与该列表相关联的名称。
答案 0 :(得分:0)
您可以简单地使用字典:
masterdict={'cucumbers': cucumbers, 'oranges': oranges, 'salads': salads}
而不是检查名称,你迭代字典的项目:
for name, sublist in masterdict.items():
print(name, sublist)
如果您想要它的订购(并且您没有订购dict
的Python 3.6),则有collections.OrderedDict
。
获取变量名称的问题是变量引用python对象,但是可以有许多(命名不同的)变量引用同一个对象。此外,对象不需要存在(可见)名称。例如,如果你有类似的东西:
def func():
cucumber = [1, 2, 3]
return [cucumber]
然后,当函数完成时,名称cucumber
不再存在。但是对象([1, 2, 3]
列表)仍然存在,但由于它被包装在另一个列表中,它甚至不再具有“名称”。只有外部列表可以在返回值存储在变量中时具有名称。
答案 1 :(得分:0)
定义3个列表,并将它们放在一个更大的列表中:
In [1]: x = [1,2,3]
In [2]: y = ['a','b','c']
In [3]: z = []
In [4]: alist = [x, y, z]
显示更大的列表:
In [5]: alist
Out[5]: [[1, 2, 3], ['a', 'b', 'c'], []]
查看该列表的元素:
In [7]: alist[0]
Out[7]: [1, 2, 3]
alist
包含指向其他列表对象的指针,我们可以通过查看id
来查看:
In [8]: id(alist[0])
Out[8]: 2895592076
In [9]: id(x)
Out[9]: 2895592076
但是给定id
,找不到指向该对象的所有变量都不是一种简单的方法。
要记住的一个关键事项是变量x
,它的名称和它引用的对象之间存在差异。
我可以指定另一个变量来指向列表对象:
In [10]: x1 = x
In [11]: id(x1)
Out[11]: 2895592076
我也可以将这些列表放在字典中:
In [12]: dd = {'x': x, 'y1': y, 'zfoo': z}
In [13]: dd
Out[13]: {'x': [1, 2, 3], 'y1': ['a', 'b', 'c'], 'zfoo': []}
In [14]: id(dd['x'])
Out[14]: 2895592076
请注意,字典中的名称或键不必与全局名称空间中的名称匹配。
仅仅因为我用alist
构造[x, y, z]
并不意味着Python保留了该语句的记录。 alist
包含指向x
,y
和z
引用的对象的指针,但不保留该语句中使用的变量名称的任何记录。
所以我认为你要求的东西在Python中是不现实的。
切换x
,y
引用而不更改alist
:
In [15]: x, y = y, x
In [16]: alist
Out[16]: [[1, 2, 3], ['a', 'b', 'c'], []]
In [17]: x
Out[17]: ['a', 'b', 'c']
In [18]: x1 # x and x1 no longer point to the same object
Out[18]: [1, 2, 3]