Python:遍历列表并仅打印出数组变量?

时间:2021-04-15 13:39:03

标签: python arrays python-3.x list

我有以下示例数据和列表:

data.var1 = np.array([1, 2, 3])
data.var2 = 30
data.var3 = 10
allvariables = [data.var1, data.var2, data.var3]

其中任何一个变量都可以是一个数组或一个数字。 (上面的数据只是一个例子)我想遍历 allvariables 列表并将所有数组添加到一个新列表中。

这是我迄今为止尝试过的:

arrayvariables = [vname for vname, i in vars(data).items() if isinstance(i, np.ndarray)]

但这会将变量名称作为字符串添加到数组变量列表中。 (前任: "var1")

我也试过

arrayvariables = [vars(data).get(vname) for vname in allvariables if isinstance(vars(data).get(vname), np.ndarray)]

但这只是将数组值添加到列表中。 (例如:数组([1, 2, 3]))

我想要的是数组变量列表与以下代码将创建的列表相同(假设 data.var1 是唯一的数组):

arrayvariables = [data.var1]

我对 Python 还很陌生,所以我可能只是遗漏了一些明显的东西。

谢谢

3 个答案:

答案 0 :(得分:1)

您的意思是您有一个包含大量变量的列表,并且您想遍历它并打印出作为数组的变量?此代码可能对您有所帮助

list_to_check = [1, 2, 5, ['another', 'list'], 10, 20]
for i in list_to_check:
    if type(i) == list: # Check if that element is a list
        print(i)

Click here to see the Result:

答案 1 :(得分:0)

让我们定义一个数组是一个非空形状的对象。

import numpy as np


a = [
    np.array(1),  # shape: ()
    np.arange(5), # shape: (5,)
    np.int(100),  # shape: ()
    np.arange(0.5, 5.5), # shape: (5,)
    5, # shape: ()
]

print(a)

r = [s for s in a if np.shape(s)]

print(r)

输出:

[array(1), array([0, 1, 2, 3, 4]), 100, array([0.5, 1.5, 2.5, 3.5, 4.5]), 5]
[array([0, 1, 2, 3, 4]), array([0.5, 1.5, 2.5, 3.5, 4.5])]

由于您已将变量放入 allvariables,因此从 vars(data) 访问这些变量不需要 data。只需使用以下内容从 allvariables

中提取数组对象
array_variables = [s for s in allvariables if np.shape(s)]

如果你想从 data 的属性中提取所有数组,vars(data) 给出这些属性的字典。

array_variables = [s for s in vars(data).values() if np.shape(s)]

答案 2 :(得分:0)

您似乎快要回答了。我相信您正在寻找的是:

import numpy as np

class data:
    var1: any
    var2: any
    var3: any

data.var1 = np.array([1, 2, 3])
data.var2 = 30
data.var3 = 10
allvariables = [data.var1, data.var2, data.var3]

arrayvars = [v.tolist() for k, v in vars(data).items() if isinstance(v, np.ndarray)]

print(arrayvars)