gpt4 book ai didi

python - Python 中非 None 的最小数字

转载 作者:太空狗 更新时间:2023-10-30 00:40:52 24 4
gpt4 key购买 nike

这个问题很接近我的问题,但又不完全是:List minimum in Python with None? .我需要考虑到列表中所有值都为 None 的可能性。

我有一种情况,我必须在数据库中查找一些数字,它们可能存在或返回为空。我需要找到这些现有数字中的最小值。例如:

min_if_exists(1, 2) returns 1
min_if_exists(5, None) returns 5
min_if_exists(None, None) returns None

幸运的是我可以做这样的事情:

def min_if_exists(a, b):
return min(a, b)
elif a:
return a
elif b:
return b
else:
return None

以下是对上述问题的回答:

lowest = min(x for x in (a, b) if x is not None)

然而,如果 a 和 b 为 None,我会得到一个异常,因为我输入了一个空序列。我可以简单地捕获异常,或者我可以在序列中包含任意大的数字 (a, b, 100000000)。对于可能全部为 None 的任意长的数字序列,我可以(大概)非 Python 地这样做:

def min_if_exists(list_of_nums):
not_a_none_exists = False
for n in list_of_nums:
if n is not None:
not_a_none_exists = True
if not_a_none_exists:
return min(x for x in list_of_nums if x is not None)
else:
return None

是否有更 Pythonic、更简洁的方法来做到这一点?

最佳答案

试试这个,这是一个 pythonic 解决方案:

def min_if_exists(list_of_nums):
try:
return min(x for x in list_of_nums if x is not None)
except ValueError:
return None

记住:在 Python 中,请求原谅比获得许可更容易!引用 documentation :

This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and fast style is characterized by the presence of many try and except statements. The technique contrasts with the LBYL (look before you leap) style common to many other languages such as C.

关于python - Python 中非 None 的最小数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21372228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com