2024-04-20 05:10:51 发布
网友
我将执行以下操作:
min_xy=min(x,y)
x/y/两者可能都不是。 如果我以这种方式过滤None值:
min_xy=min(filter(None,(x,y)))
如果x&y都不是,我可能会得到这个断言。你知道吗
ValueError: min() arg is an empty sequence
有没有一种优雅的方法可以得到一个小数字,如果只有一个是没有的,如果两个都是没有得到?你知道吗
x, y = None, 1 min_xy = next(filter(lambda __: __ is not None, (x, y)), None) if any(map(lambda __: __ is None, (x, y))) else min(x, y) print(min_xy)
为了保持可读性,我建议:
def coalescing_min(*args): args = [i for i in args if i is not None] if args: return min(args) else: return None
你可以这样做:
min_xy = None if all(n is None for n in (x, y)) else min(filter(None,(x,y)))
您还可以将其转换为function:
function
def min_xy(x, y): if all(n is None for n in (x, y)): return None else: return min(filter(None,(x,y)))
或lambda:
lambda
min_xy = lambda x, y: None if all(n is None for n in (x, y)) else min(filter(None,(x,y)))
测试:
print(min_xy(1, None)) # 1 print(min_xy(1, 2)) # 1 print(min_xy(None, 1)) # 1 print(min_xy(None, None)) # None
编辑:
自从python3.4以来,min被更新为在iterable为空的情况下接受默认参数。这使得一个优雅的一行:
min
min_xy = min(filter(None, (x, y)), default=None)
The default argument specifies an object to return if the provided iterable is empty. If the iterable is empty and default is not provided, a ValueError is raised.
为了保持可读性,我建议:
你可以这样做:
您还可以将其转换为
function
:或
lambda
:测试:
编辑:
自从python3.4以来,
min
被更新为在iterable为空的情况下接受默认参数。这使得一个优雅的一行:相关问题 更多 >
编程相关推荐