2013-07-09 110 views
1

你如何替代追加或覆蓋python中的列表元素?Python追加或覆蓋列表元素

我目前正在翻譯我在紅寶石工作,蟒蛇的功能,我的Ruby代碼看起來像這樣:

def self.push_array_hash(key,selector,level,array) 
    (0..array.length).each do |i| 
    x = array[i] 
    selector[level] = i+1 
    if(x.is_a?(Array)) 
     self.push_array_hash(key,selector,level+1,x) 
    end 
    self.push_datum("#{key}(#{selector.join(',')})", x) 
    end 
end 

我能夠調用這個函數爲:self.push_array_hash(key,Array.new,0,val),而不必知道尺寸嵌套數組。如果selector[level]尚不存在,並且在level存在的情況下更改該值,代碼selector[level] = i+1可輕鬆處理將元素附加到數組。

這是紅寶石(只給予所以每個人都可以理解我的目標),到python。這是我翻譯的代碼:

def push_list_dict(self, key, selector, level, array): 
    for i, x in enumerate(array): 
    selector[level] = i+1 
    if isinstance(x, (list, set)): 
     if isinstance(value, set): 
     value = sorted(value) 
     self.push_list_dict(key,selector,level+1,x) 
    self.push_datum(key+"("+",".join(map(str, selector))+")",x) 

我所說的功能,例如:self.push_array_dict(key,[],0,value),但它打破了上selector[level] = i+1和給我的錯誤:IndexError: list assignment index out of range。是否有一種簡單的方法將數值附加到數組或重置值?謝謝,

約書亞

+2

相反,你可以解釋一下你正在試圖解決這個問題,有一個例子,你可能會得到更好的Python的解決方案 –

回答

3

你可以使用:

selector[level:level+1] = [i+1] 

如果selector[level]已經存在,這種替代的價值。 如果它不存在,它會附加值。

例如,

In [102]: selector = [] 

In [103]: selector[0:1] = [100] 

In [104]: selector 
Out[104]: [100] 

In [105]: selector[0:1] = [200] 

In [106]: selector 
Out[106]: [200] 

通知會發生什麼,如果該指數超出了selector長度:

In [107]: selector[7:8] = [300] 

In [108]: selector 
Out[108]: [200, 300] 

它不會在該索引位置插入,它只是追加。

+0

因爲我通過嵌套的步驟數組,以便我不需要索引超出選擇器+ 1的長度,並且此解決方案將工作。謝謝,約書亞 – jnedrud

1

Python不會像ruby那樣神奇地擴展數組。一種方法是使用[None] * x[0] * x

selector += [None] * (level-len(selector)) 
selector[level] = i+1 

除了檢查長度和墊到正確的長度:

range不包括「停止」的值,所以你可能不希望-1那裏。通常的方法來寫這個

for i in range(0,len(array)-1): 
    x = array[i] 
    ... 

for i, x in enumerate(array): 
    ... 
+0

感謝您的提示! – jnedrud