2016-09-25 44 views
0

我聲明瞭一個類,並且在__init__方法中,我聲明瞭兩個將與該類的實例關聯的變量。每個聲明的變量都被初始化爲一個N​​umPy的零數組,後來被其他數據填充。在Python列表中自動包含對象

在某些點上,除了這個__init__方法之外,我需要循環遍歷包含這些變量(NumPy數組)的每個對象,並將數組值重置爲零。因此,在__init__方法中,我想將所有這些變量添加到列表中以便稍後迭代。如果我手動這樣做,這是微不足道的。

但是,我需要頻繁地添加和刪除__init__中聲明的這些變量的一些數量。每次我這樣做,我都不想手動調整列表中包含的變量。

如何創建list,dict或其他這些變量的容器,它們自動調整自身,使其包含所有這些被初始化的變量,而不管這些變量的數量是多少?作爲額外的複雜因素,self.container_of_arrays不得包含來自__init__的「其他」變量,例如self.array_length

我有什麼,在哪裏self.container_of_arrays當前必須手動如果self.my_variable_three創建調整:

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的答案提供正確的解決方案。如上所述,可以使用字典或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) 
+0

您是否需要通過屬性名稱引用這些數組,例如: 'my_variable_one',或者你可以在容器'container_of_arrays [1]'中索引。由於這是一個列表,你可以很容易'追加'新項目並刪除它們。 – hpaulj

回答

1

而不是創建每個numpy的數組變量的,你爲什麼不只是創建數組包含每個需要數組列表,並通過索引引用它們?

class generic_class(): 
    def __init__(self, array_length, array_widths=[]): 
     self.array_length = array_length 
     self.arrays = [ 
      numpy.zeros((self.array_length, array_width), dtype=float) 
      for array_width in array_widths 
     ] 

然後,您可以通過索引訪問每個數組作爲self.arrays[i]

或者,如果您需要通過名稱訪問數組,您可以使用一個字符串(數組名稱)作爲每個數組的鍵。

相關問題