2017-10-09 570 views
0

我對Python非常陌生,我試圖從我的數據實現MSE(均方誤差)。 我想訪問列表中的每個元素,並從平均值中減去原始數據,並將其平均值作爲單獨步驟的末尾,所以我可以在末尾對其進行總結,併除以元素總數名單。Python:如何訪問列表中的每個元素,並將其放入一個新列表

現在,我只是試圖訪問列表中的每個元素,並找出差異,並將其放入新創建的列表newList中。

這裏是我當前的代碼:

for i in range(len(X)): 
    newList[i] = X[i] - tempList[i] 

起初,我試圖做

for i in range(len(X)): 
    newList[i] = X[i] - mean 

然而,這給了我類型錯誤,說我不能從列表中減去浮動。

於是,我就做了一個名爲tempList新的列表,並通過這樣做,把平均值到列表:

for i in range(len(X)): 
    tempList.insert(i, mean) #now my tempList contains [3.995, 3.995, 3.995 ....., 3.995] 

現在它給我同樣的類型錯誤:不支持的操作類型爲 - : '列表'和'浮動'。

我對java和其他C語言更熟悉,我認爲這是編輯列表中每個元素的方式,但我猜Python是不同的(顯然)。

任何提示將不勝感激。

在此先感謝。

+0

你是如何創建的X名單? – Xorgon

+0

@Xorgon X是浮點列表的數據列表,如[[3.0],[2.5],[5.0],....,[1.5]] – cohsta

+2

如果這是您正在使用的語法,那就是問題所在。在Python中,如果有東西在方括號中,它就是一個列表。所以當你在做X [i]時,它會返回另一個列表。在該示例中,X [0] = [3.0],它是長度爲1(X [0] [0] = 3.0)的列表。而不是這樣做,只需使用以下語法將X定義爲浮點列表: [3.0,2.5,5.0,...,1.5]。 – Xorgon

回答

1

你在代碼的其他地方有問題,這就是爲什麼你會得到類型錯誤。你展示的片段完全合法。

X = [ 2, 12, 85, 0, 6 ] 
    tempList = [ 3, 4, 3, 1, 0 ] 
    newList = list([0] * len(X)) 

    for i in range(len(X)): 
     newList[i] = X[i] - tempList[i] 

    print(newList) 

總之,回到你原來的問題,你可以使用功能的風格

X = [ 2, 12, 85, 0, 6 ] 
    mean = sum(X)/float(len(X)) 
    print(mean) 

    Y = map(lambda x: x - mean, X) 
    print(Y) 
+1

在這種情況下,列表理解將更受歡迎:'[x - X中x的平均值]' –

+0

@ juanpa.arrivillaga當然,你是對的!我最近做了太多Scala。 –

相關問題