如何将列表变量名称转换为字符串

时间:2015-05-19 13:11:42

标签: python variables

我认为这应该很简单,但我不知道该怎么做。我有一个列表变量元组:

A = (a,b,c)

,其中

a = [1,2,3,...]
b = [2,4,6,4,...]
c = [4,6,4,...]

我想创建一个元组或列表,它是变量的名称。所以,

A_names = ('a','b','c')

我怎么能这样做?我的元组将有更多的变量,并不总是相同的变量。我试过像

这样的东西
A_names = tuple([str(var) for var in A])

但这不起作用。

5 个答案:

答案 0 :(得分:1)

假设您需要动态/可访问的名称,则需要使用字典。

这是一个带字典的实现:

my_variables = {'a': [1,2,3,...],
                'b': [2,4,6,4,...],
                'c': [4,6,4,...]}

my_variable_names = my_variables.keys()

for name in my_variable_names:
    print(my_variables[name])

答案 1 :(得分:1)

你问的问题是,做A = (a, b, c)并不会分配变量" a"," b"和" c"到元组A。相反,您正在为这些名称引用的每个对象创建一个新引用。

例如,如果我做了A = (a,),则是一个包含单个对象的元组。我没有分配变量" a"。而是在元组对象中的位置0处创建引用。该引用是名称a引用的同一对象。

>>> a = 1
>>> b = 2
>>> A = (a, b)
>>> A
(1, 2)
>>> a = 3
>>> A
(1, 2)

请注意,为a分配新值根本不会更改元组中的值。

现在,您可以使用locals()globals()字典并查找与A中的字词匹配的值,但由于您可以拥有多个值,因此无法保证准确性名称指的是相同的值,你不知道哪个是哪个。

>>> for key, val in locals().items():
    if val in A:
        print(key, val)


('a', 1)
('b', 2)

答案 2 :(得分:1)

我的连接搞砸了所以我不能早点发布,但我相信这可以解决你的问题而不用字典。

import inspect

def retrieve_name(var):
    local_vars = inspect.currentframe().f_back.f_locals.items()
    return [var_name for var_name, var_val in local_vars if var_val is var]

a = [1,2,3]
b = [2,4,6,4]
c = [4,6,4]

a_list = (a,b,c)
a_names = []

for x in a_list:
    a_names += (retrieve_name(x)[0])

print a_names

输出['a', 'b', 'c']

答案 3 :(得分:0)

出于学术兴趣:

dir() will give you a list of the variables currently visible,
locals() gives the list of local variables
globals() (guess)

请注意,一些意外变量将显示(以__开头和结尾),这些变量已由Python定义。

答案 4 :(得分:0)

A = {'a' : [1,2,3,...],
     'b' : [2,4,6,4,...],
     'c' : [4,6,4,...]}

A_names = A.keys()

for name in A_names:
    print(A[name])

然后,您可以随时通过说:

将新值添加到字典中
A.update({'d' : [3,6,3,8,...], 'e' : [1,7,2,2,...]})

或者,您可以通过以下方式更改项目的值:

A.update({'a' : [1,3,2,...]})

要打印特定值,您只需输入:

即可
print(A['c'])