2015-07-20 96 views
2

我想沿着blog post題爲遵循如何在PythonPython中的int對象可以在函數內迭代嗎?

而且從博客實現樸素貝葉斯從無到有,這是用於定義由類類型分離數據庫的函數的代碼。

def separateByClass(dataset): 
    separated = {} 
    for i in range(len(dataset)): 
     vector = dataset[i] 
     if (vector[-1] not in separated): 
      separated[vector[-1]] = [] 
     separated[vector[-1]].append(vector) 
    return separated 

但我不明白爲什麼vector[-1]是一個正確的使用情況時vectorint類型的對象。如果我在函數之外逐個嘗試相同的命令,那麼帶有vector[-1]的代碼行顯然會拋出一個TypeError: 'int' object has no attribute '__getitem__'。那麼它是如何在函數內部工作的?

+3

向量通常是整數*元組*,取決於維數。 –

+0

數據集定義在您鏈接的網站上代碼的下方,數據集= [[1,20,1],[2,21,0],[3,22,1]]'。這不是一個int – user3636636

回答

6

不,整數不能在函數或其他地方變得可迭代。

但是,dataset中的值不是整數。他們是名單;遍歷數據集時

dataset = [[1,20,1], [2,21,0], [3,22,1]] 

所以,每個vector是這些列表中的一個(第一[1, 20, 1],然後[2, 21, 0]等),並vector[-1]是在每個的最後一個值:所述製品限定了數據集在下一代碼段那些列表。

+0

非常感謝。這是我的錯誤。爲了嘗試這個功能,我創建了一個數據集作爲整數列表而不是列表列表。我現在明白了。謝謝@ martijn-pieters和你們所有人。 –

3

在這個例子中,dataset[i]是一個列表的列表:

dataset = [[1,20,1], [2,21,0], [3,22,1]] 

這意味着,dataset[i]是一個列表本身,例如:

dataset[0] = [1,20,1] 

所以dataset[0][-1]1,最後元素dataset[0]

+0

你說得對,糾正了這一點。 – adrianus