是否有一些a,b这样max(a,b)!= max(b,a)?

11 python python-3.x

在蟒蛇3.x中,是否有一些ab这样max(a, b) != max(b, a)

a并且b应该是内置的python类型,并且不包含任何转换。

该类型的ab可以是:NUM,浮法,布尔,列表,元组...

例:

a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong
Run Code Online (Sandbox Code Playgroud)

orl*_*rlp 17

这满足所有条件:

>>> max(1.0, float("nan"))
1.0

>>> max(float("nan"), 1.0)
nan
Run Code Online (Sandbox Code Playgroud)

这是因为比其他任何比较!=isfloat("nan")总是返回false。

更笼统地说,max(a, b) != max(b, a)当类型a, b不提供总订单时,我们可以拥有。正如Daniel Mesejo指出的那样,布景也具有此属性。对于集合<表示“严格子集”,但是具有{1, 2}{3, 4}都不是另一个的严格子集,因此:

>>> max({1, 2}, {3, 4})
{1, 2}

>>> max({3, 4}, {1, 2})
{3, 4}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这一点没有,max(a, b) != max(b, a)因为1 == True,但是仍然存在明显的差异:

>>> max(True, 1)
True

>>> max(1, True)
1
Run Code Online (Sandbox Code Playgroud)

  • @ stackFF4:`float('nan')`是一个浮点数。它说“ float”就在那儿,所以我不确定你还期望什么。如果需要,可以使用`type`进行检查。 (9认同)
  • @ stackFF4如果`float(“ nan”)`不是内置的,那是什么?它肯定是内置的。 (7认同)
  • @Nat:但是大多数人没有人想要例外。这种“ max”行为是一种与C“ fmax”(保证NaN传播)不同的定义,而不是像“ a &lt;b?”那样。b:a`当比较为假时总是产生a。NaN是“无序的”。任何其他数字,因此,“ a &lt;NaN”始终为假,NaN &lt;b也是如此。 (2认同)

Dan*_*ejo 5

根据文档,使用maxon set会产生未定义的结果:

因此,对于依赖于总排序的函数来说,集合不是合适的参数(例如,给定一系列集合作为输入,min(),max()和sorted()会产生未定义的结果)。

这是一个例子

a = {1, 2}
b = {2, 3}
print(max(b, a) != max(a, b))
Run Code Online (Sandbox Code Playgroud)

输出量

True
Run Code Online (Sandbox Code Playgroud)