我有以下示例数据和列表:
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 还很陌生,所以我可能只是遗漏了一些明显的东西。
谢谢
答案 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)
答案 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)