Python简单的最小/最大函数,无

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

我正在尝试设计一个自定义的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) 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