在for循环中打印数组的名称

时间:2020-05-22 02:55:18

标签: python numpy loops for-loop

我有这些数据集和这个循环:

df1 = np.array([[91,9], [22,78]])
df2 = np.array([[99,1], [21,79]])
df3 = np.array([[96,4], [10,90]])
df4 = np.array([[98,2], [18,82]])

dfs = [df1, df2, df3, df4]
for i in dfs:
    tpr = i[1,1] / (i[1,0] + i[1,1])
    print('tpr: ', tpr)

,输出为:

tpr:  0.78
tpr:  0.79
tpr:  0.9
tpr:  0.82

我将如何获得这样的输出?

df1 -- tpr:  0.78
df2 -- tpr:  0.79
df3 -- tpr:  0.9
df4 -- tpr:  0.82

主要问题是我需要打印的数组名称。我查看了其他一些答案(不同的问题)并尝试了这些,但无法正常工作。 例如,在打印语句中使用[i]和其他内容来尝试获取名称。

例如How to print the list in 'for' loop using .format() in Python?,但问题有所不同,似乎并不适用。

3 个答案:

答案 0 :(得分:2)

最好的办法是使用字典来存储数组。

dfs = {'df1': df1, 'df2': df2, 'df3': df3, 'df4': df4}

然后,您可以遍历键以获取其名称,然后为它们的值索引字典。

for i in dfs.keys():
    val = dfs[i]
    tpr = val[1,1] / (val[1,0] + val[1,1])
    print(i, '-- tpr: ', tpr)

或者,您可以安装varname并使用varname.nameof()获得名称。

答案 1 :(得分:2)

您可以从全局变量中检索变量名称

import numpy as np

df1 = np.array([[91,9], [22,78]])
df2 = np.array([[99,1], [21,79]])
df3 = np.array([[96,4], [10,90]])
df4 = np.array([[98,2], [18,82]])

dfs = [df1, df2, df3, df4]
for i, df in enumerate(dfs):
    tpr = df[1,1] / (df[1,0] + df[1,1])
    # Use generator to find name of current df in global names table
    name = next(x for x in globals() if globals()[x] is df)
    print(f'{name} -- tpr: {tpr}')

输出

df1 -- tpr: 0.78
df2 -- tpr: 0.79
df3 -- tpr: 0.9
df4 -- tpr: 0.82

答案 2 :(得分:1)

请注意,用于变量的名称不是您应该在代码逻辑中使用的名称-这只是一个坏主意。

但是-要知道您的输出来自哪个数据帧-您可以在循环中打印该数据帧的索引:

import numpy as np

df1 = np.array([[91,9], [22,78]])
df2 = np.array([[99,1], [21,79]])
df3 = np.array([[96,4], [10,90]])
df4 = np.array([[98,2], [18,82]])

dfs = [df1, df2, df3, df4]
for i, df in enumerate(dfs):
    tpr = df[1,1] / (df[1,0] + df[1,1])
    print(f'df{i+1} -- tpr: {tpr}')

输出:

df1 -- tpr: 0.78
df2 -- tpr: 0.79
df3 -- tpr: 0.9
df4 -- tpr: 0.82

我使用i+1来获得所需的输出,但是仅使用i会更准确。

相关问题