2014-03-29 100 views
0

中列出我有格式標籤的一些數據+ numpy的陣列狀將數據添加到列表

x = ('red', array([ 0., 1., 0., ..., 0., 0., 0.])) 

和一個列表[[]]和一個循環,通過雲和基於某些標準,就應該把每個列表都在列表中。我嘗試列表[somevalue] .append(x),但是當somevalues> 0我得到一個錯誤IndexError:列表索引超出範圍。我錯了什麼?

此外,我需要能夠從子列表中訪問numpy數組以後再做一些處理。誰能幫我?

+1

顯示您的代碼。 – wwii

+0

只需嘗試以下內容: x =('red',array([0.,1,0,0,...,0,0,0]))調用l [1] .append(x),你會看到相同的錯誤彈出 – user3149650

+1

序列是從零開始的。 – wwii

回答

0

沒有發佈更具體的代碼,很難提供幫助。但根據您的描述,您面臨的具體問題是您無法使用尚不存在的索引獲取列表的值。如果你以[[]]開頭,那麼你只有一個元素的列表,它本身是一個沒有元素的列表。所以0將是您可以通過列表[somevalue]訪問的唯一索引。聽起來像是你想有一個defaultdict(見集合模塊),或defaultlist:creating a defaultlist in python

1

你有一個清單l包含一個元素(而這種元素恰好是另一個列表,但在這裏,這不是高度相關),因此, :

l[0] # WORKS: this is the first item in the list 

l[1] # INVALID: there is no item here, so it raised an IndexError 

這是其他人都在說的基本答案,我只是想說得很清楚。請注意,特別是Python列表與第一個元素在0而非1索引,所以長度爲1的名單將只在指數有一個單一的元素0

,你可能更容易識別的問題的方法自己本來是分裂您使用了兩行的複合線 - 這是調試的常用方法通常是非常有用的:

# l[1].append(x) # doing two things in the same line (accessing and element, and then appending) 
temp = l[1] 
temp.append(x) 

這裏回溯將指向更明確的問題。 (另外,我不同意dpkp使用「默認列表」的建議,因爲我認爲這是一個針對初學者問題的過於複雜,非標準和高級的解決方案,相反,如果您想要解決此問題的解決方法在那裏自動創建一個列表來附加到,請張貼作爲一個單獨的問題,更具體地說明爲什麼你想要它 - 我想你可能會想要一個defaultdict使用整數鍵,但這應該等待完整的問題。 )

1

聽起來好像你在說:如果我的列表L已經有一個子列表在somevalue的位置上,那麼就附加x它。如果不是,請創建一個新列表,如L[somevalue],值爲x。如果是這種情況,那麼不能直接引用這些不存在的元素,而沒有其他元素。

如果somevalue總是在列表中的下一個元素0,1,2則可能會使其與列表工作,但如果它可能是5當只有0,1存在的元素,那麼你就可以使用字典來代替。這可讓您參考D[5]並生成不存在的非順序項目。

D={} 
D[somevalue] = D.get(somevalue,[]) + [x] 

如果使用+[x].get()就會避免試圖.append()NoneType對象錯誤。