2016-11-29 60 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)