【发布时间】:2016-09-25 00:20:21
【问题描述】:
我声明了一个类,在__init__ 方法中,我声明了两个变量,它们将与该类的一个实例相关联。每个声明的变量都被初始化为一个 NumPy 的零数组,然后用其他数据填充。
在某些时候,在这个__init__ 方法之外,我需要遍历一个包含每个变量(NumPy 数组)的对象,并将每个变量中的数组值重置为零。因此,在__init__ 方法中,我想将所有这些变量添加到列表中以供以后迭代。如果我手动执行一次,这很简单。
但是,我需要经常添加和删除在__init__ 中声明的一些变量。每次我这样做时,我都不想手动调整列表中包含的变量。
如何创建list、dict 或这些变量的其他容器,这些变量会自动调整自身,使其包含所有正在初始化的变量,而不管这些变量的数量是多少?此外,self.container_of_arrays 不得包含来自__init__ 的“其他”变量,例如self.array_length。
我所拥有的,如果创建了 self.my_variable_three,则当前必须手动调整 self.container_of_arrays:
class generic_class():
def __init__(self, array_width_one, array_width_two):
self.array_length = some_integer
self.my_variable_one = numpy.zeros((self.array_length, array_width_one), dtype=float)
self.my_variable_two = numpy.zeros((self.array_length, array_width_two), dtype=float)
self.container_of_arrays = [self.my_variable_one, self.my_variable_two]
我试图在dict 中声明我的变量,以便从一开始它们就包含在dict 中,但这会导致对未定义变量的引用。例如
self.container_of_arrays = OrderedDict([(self.my_variable_one, numpy.zeros((self.array_length, array_width_one), dtype=float)),
(self.my_variable_two, numpy.zeros((self.array_length, array_width_two), dtype=float))
])
更新:
xli 的回答提供了正确的解决方案。如建议的那样,可以使用 dict 或 OrderedDict 按名称访问数组。对于任何想要这样做的人,这是我实际实现的代码:
my_data = [('variable_one_name', len(variable_one_data)),
('variable_two_name', len(variable_two_data)),
] # Intentionally outside the class in a location where variables are added by the user
class generic_class():
def __init__(self, array_length, my_data):
self.container_of_arrays = OrderedDict((variable_name, numerix.zeros((array_length, array_width), dtype=float))
for variable_name, array_width in my_data)
【问题讨论】:
-
您是否需要通过属性名称来引用这些数组,例如
my_variable_one,或者你可以在容器中索引,container_of_arrays[1]。由于这是一个列表,您可以轻松地append新项目和删除项目。
标签: python list numpy dictionary containers