Pythonic方式将变量名称设置为字符串

时间:2014-08-21 16:30:09

标签: python

data1 = [1,2,3,4,5]
data2 = [7,8,9,10,11]  


x = data1
y = data2

我需要的是上述变量的字符串如下:

xlabel = 'data1'
ylabel = 'data2'

不是手动编写,而是如何使用x调用,如下所示:

xlabel = str(x) 

但是上面的错误。 那么,怎么办?

xlabel =???

有没有pythonic方式吗?

3 个答案:

答案 0 :(得分:5)

要了解为什么这没有意义,请考虑以下代码段

def magic_name_getter(object):
    # here be dragons
    return the_name

data1 = [1,2,3,4]
magic_name_getter(data1)  # returns 'data1'

data1 = [1,2,3,4,5]
data2 = [1,2,3,4,5]
magic_name_getter(data2)  # returns 'data2' (..or 'data1'?)

magic_name_getter([7,8,9,10,11])  # returns ... ummm ... ???

python中的对象可以有多个名称,或者根本没有名称。

所以你想要的是not impossible,这非常困难。由于变量名称是用例的重要数据,因此您应该使用 keys values 的字典将名称映射到列表,以便您可以轻松访问名称(键)以及数据(值)。

答案 1 :(得分:3)

您应该考虑组织数据,例如在字典中

a = dict(
    data1 = [1,2,3,4,5],
    data2 = [6,7,8,9,10],
    )

x = a.keys()[0]
y = a.keys()[1]

print x, y

输出:

data1 data2

通常您不需要将密钥存储在xy等单独的变量中,而是直接在a.keys()a.items()上工作。

答案 2 :(得分:1)

collections.namedtuple可能会帮助您:

import collections
Parameters = collections.namedtuple('Parameters', 'dataname, data', verbose = False)
x = Parameters('data1', [1,2,3,4,5])
y = Parameters('data2', [7,8,9,10,11])

>>> x.dataname
'data1'
>>> x.data
[1, 2, 3, 4, 5]
>>> y.dataname
'data2'
>>> y.data
[7, 8, 9, 10, 11]

您可以将它用于这样的情节:

plt.scatter(x.data, y.data)
plt.xlabel(x.dataname)