Python简单的最小/最大函数,无
我正在尝试设计一个自定义的min/max函数,该函数总是从输入中过滤掉所有的None,如果没有,它也将返回None。 我已经找到了一些答案,这些答案偏向于我的问题,即如何创建一个可以处理任何事情的理想函数。与原始的最小/最大功能相同 这就是我迄今为止所创造的:Python简单的最小/最大函数,无,python,python-3.x,min,nonetype,Python,Python 3.x,Min,Nonetype,我正在尝试设计一个自定义的min/max函数,该函数总是从输入中过滤掉所有的None,如果没有,它也将返回None。 我已经找到了一些答案,这些答案偏向于我的问题,即如何创建一个可以处理任何事情的理想函数。与原始的最小/最大功能相同 这就是我迄今为止所创造的: def min_null(q, *args): if isinstance(q, Iterable): return min(filter(lambda x: x is not None, q)) if any(q
def min_null(q, *args):
if isinstance(q, Iterable):
return min(filter(lambda x: x is not None, q)) if any(q) else None
else:
return min_null([q, *args])
你能想象这会失败吗?或者如何改进
我很乐意接受任何反馈:)是的,一个失败案例是
minu null([0,0])
,它返回None
,而不是我预期的0
。这可以通过多种方式解决,但其中一种方法是将过滤器(lambda x:x不是None,q)
取出到一个变量中,然后检查它的长度,而不仅仅是检查任何真实值。听起来您可以使用带有键=
的min/max函数和一个专门处理None
的自定义比较对象:
class Predicate:
def __init__(self, item):
self.item = item
def __lt__(self, other):
try:
return self.item < other.item
except TypeError:
return False
print(min([0, 1, 2, None, 3, 4], key=Predicate))
print(min([None], key=Predicate))
print(max([0, 1, 2, 3, None, 4, 5], key=Predicate))
print(max([None], key=Predicate))
您是否有更多关于预期结果的示例或测试?您能否清楚地指定预期的可能输入?单一值、可比性、上述任何组合?需要注意的是:如果您需要一个如此灵活的函数,这显然意味着您并不总是确定要处理的数据类型,例如单值或可重用数据。这是你首先要考虑的问题。为什么你不知道你在处理什么?我想用一个函数来处理元组、列表和单个变量,这样我就不必查看数据中的内容了。我只知道一个调用中的所有参数都是相同的类型,有时包装在列表中,有时则不是。如果给定的iterable为空怎么办?
0
None
5
None
0