如何从变量数组中获取变量名作为字符串?

How to get the variable name as string from an array of variables?

我有一组数据帧:

a=[df1,df2,df3]

但我需要变量名作为字符串

b=['df1','df2','df3']

我该怎么做?

您可以使用列表理解:

a = [df1, df2, df3]
b = [x.name for x in a]

此答案假定数据框变量的名称与变量名称本身相匹配。

this answer 中汲取灵感, 您可以使用以下代码解决您的问题:

def get_var_name(variable):
     for name, value in globals().items():
        if value is variable:
            return name

a = [df1, df2, df3]

b = [get_var_name(el) for el in a]
# print(b) gives ['df1', 'df2', 'df3']

在python中获取对象的变量名实际上是相当棘手的。 name->object 映射是严格的单向映射。更糟糕的是,多个名称可以引用同一个对象(内存地址中的相同数据块)。

不过,也不是没有可能。虽然这个方法很脏(当有多个名称引用同一个对象时。

假设你的lista,你的dataframedf1,df2,df2都是全局变量,那么它们都在globals() .您可以试试下面的一行代码:

[i for i in globals().keys() if id(eval(i)) in [id(j) for j in a]]

你可以自己验证一下。