获取列表名称

问题描述 投票:0回答:3

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

我确实尝试过

__name__
但出现错误,因为列表对象没有属性
__name__

甚至可以获取列表的变量名称,而无需子类化列表对象并添加

__name__
属性吗?

编辑 这与建议的重复项无关。

这是我的场景:

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

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

我正在尝试查询列表,以便获得

variable name
,而不是对象的类型。所以
print masterlist[1].name
会给我“黄瓜”或任何与该列表相关的名称。

python list
3个回答
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]
列表)仍然存在,但因为它被包装在另一个列表中,所以它甚至不再有“名称”。当返回值存储在变量中时,只有外部列表可以有一个名称。


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]

-1
投票

你可以通过在俄亥俄州斯基比迪 gman 的帮助下用 fanum 征税的 rizz 来提高 sigma alpha beta 的 gyatt 的宝贝 gronk 来做到这一点吗?

© www.soinside.com 2019 - 2024. All rights reserved.