获取列表的名称

时间:2017-05-16 23:58:49

标签: python list

我不确定这是否可以通过简单的方式实现,但我正在尝试获取列表对象的名称。

我确实尝试使用__name__但是我收到错误,因为列表对象没有属性__name__

甚至可以获取列表的变量名,而不是列表对象的子类并添加__name__属性?

EDIT 这与建议的副本无关。

这是我的情景:

cucumbers=[]
oranges=[]
salads=[]
...
masterlist=[cucumbers, oranges, salads]

有时我只得到2个列表,我得到5个,所以主列表每次都有不同数量的列表;当我打印它时,我只获得了值;所以我不知道第一个清单是黄瓜,橙子,沙拉还是其他任何东西。

我正在尝试查询列表,因此我可以获取variable name,而不是对象的类型。所以print masterlist[1].name会给我“黄瓜”或与该列表相关联的名称。

2 个答案:

答案 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包含指向xyz引用的对象的指针,但不保留该语句中使用的变量名称的任何记录。

所以我认为你要求的东西在Python中是不现实的。

切换xy引用而不更改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]