2016-11-29 77 views
-3

我得從迴路列表最小值,但我得到一個錯誤:最小值值

Python 3.5.2 (default, Dec 2015, 13:05:11) 
[GCC 4.8.2] on linux 

Traceback (most recent call last): 
    File "python", line 6, in <module> 
TypeError: unorderable types: int() < NoneType() 

這裏是我的代碼:

tab = [1,2,3,4, None, None, None] 

min_value = None 
for i in tab: 
    if i: 
    if int(i) < min_value: 
     min_value = i 
     print(min_value) 
+1

可能的複製[類型錯誤(unorderable類型:INT()<= NoneType())](http://stackoverflow.com/questions/23364190/typeerror-unorderable-types-int-nonetype) – lubilis

+0

什麼結果你期望從int與'None'進行比較嗎? – khelwood

回答

1

初始化min_value的東西數字而不是None。

min_value = float("inf") 

您還可以使用min()功能這樣的事情:

min(v for v in tab if v is not None) 
+0

謝謝,它的工作原理。 –

1

簡單一點

tab = [1,2,3,4, None, None, None] 

print(min([i for i in tab if not i == None])) 
+0

如果我是0,該怎麼辦?明確使用'i!= None' –

+0

@mu無你說得對! –

+2

檢查某些東西是否不是'None'的規範方法是通過身份驗證,因爲這是一個單例對象:'如果我不是None'。 (並且'不我==沒有'會比'我!=無'更整潔。) – TigerhawkT3

1

你宣佈None的初始值,其無法比擬的數字。嘗試一個非常高的值,這不太可能在列表中 - 或者更好的是,只需抓取列表中的第一項並使用它。請確保將其設置爲0,如果它有點虛假(類似於你在做循環與if i:)。

您可以將設置新的min_value的條件與and邏輯運算符相結合。

另外,把print調用放在循環之外,所以你只打印最終的值。

tab = [1,2,3,4, None, None, None] 

min_value = tab[0] or 0 
for i in tab: 
    if i and int(i) < min_value: 
      min_value = i 

print(min_value)