2016-06-01 844 views
0

我正在學習python中面向對象的概念。下面,我創建了一個類和一個方法。我試圖通過直接調用min()函數並通過調用類方法 findMin()來找到列表的最小值。min()arg空序列

下面的代碼給我一個錯誤:

min() arg is an empty sequence

請告訴我,我在這裏失蹤。

class Solution: 
    nums = list() 
    def findMin(self, nums): 
     self.nums.sort() 
     out = min(self.nums) 
     return out 

x = [4,5,6,7,0,1,2] 
y = Solution() 

print min(x) 
print y.findMin(x) 
print len(x) 
print type(y) 
print dir(y) 

回答

1

你很困惑numsself.nums

當你寫:

nums=list() 

要設置在類的變量。

當你寫:

def findMin(self, nums): 

您收到在一個局部變量,nums參數。

然後,當您寫在接下來的兩行self.nums,如果引用實例的nums變量,它被初始化爲類的nums變量,這是空列表的價值。

因此,你基本上是對一個空列表進行排序,然後試圖找到它的最小值。這是行不通的,因爲在空列表中找不到最小值。

因此,您看到的錯誤:

ValueError: min() arg is an empty sequence 

爲了解決這個問題,使用nums而不是self.nums,因爲這樣你會引用參數,而不是實例字段。