在Python中如何处理包含None的最小值?

38 投票
3 回答
35635 浏览
提问于 2025-04-15 19:28

有没有什么聪明的内置函数或者其他方法,可以让下面这个 min() 的例子返回 1 呢?(我敢打赌不返回任何东西是有充分理由的,但在我这个特定的情况下,我真的很需要它忽略 None 的值!)

>>> max([None, 1,2])
2
>>> min([None, 1,2])
>>> 

3 个回答

4

让min()中的None变成无限大:

def noneIsInfinite(value):
    if value is None:
        return float("inf")
    else:
        return value

>>> print min([1,2,None], key=noneIsInfinite)
1

注意:这种方法在Python 3中也适用。

9

使用生成器表达式:

>>> min(value for value in [None,1,2] if value is not None)
1

最后,你可以使用过滤器:

>>> min(filter(lambda x: x is not None, [None,1,2]))
1
55

返回的是None

>>> print min([None, 1,2])
None
>>> None < 1
True

如果你想返回1,你需要把None过滤掉:

>>> L = [None, 1, 2]
>>> min(x for x in L if x is not None)
1

撰写回答