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


11

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

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

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

例:

a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong

1
您的问题不清楚
— -seralouk

我不认为... max是一个内置函数,它将可迭代对象作为输入。所以,a,b是一样的b,a,因此max(a,b)必须等于max(b,a)
— Anwarvic

1
这是一个很好的问题,但您应该对其进行编辑并进一步解释
— El.Hum

2
仅在投票最多的答案下方的评论中,您的编辑才有意义。在此处和此处,您无法辩称这float('nan')不是内置类型。我认为“内置类型”意味着您无需创建new就可以创建任何东西class。
— Teepeemm

2
如果要排除float('nan'),那为什么呢?明确地说,您可以提出一个问题,在其中排除float('nan')是否需要的东西。那不是问题。问题只是没有人知道您要问什么。
— 纳特

Answers:


17

这满足所有条件:

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

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

这是因为比其他任何比较!=或is与float("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}

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

>>> max(True, 1)
True

>>> max(1, True)
1

1
哇...为什么呢?
— Anwarvic

7
@ stackFF4如果float("nan")不是内置的,那又是什么呢?它肯定是内置的。
— sanyash19年

9
@ stackFF4:float('nan')是一个浮点数。它说float在那里,所以我不确定你还期望什么。您可以根据需要进行检查type。
— user2357112支持Monica19年

1
@Anwarvic:有趣的是,这不是python的东西,实际上是在硬件中实现浮点数的方式。NaN将错误与几乎每种编程语言中的所有内容进行比较。
— Mooing Duck,

2
@Nat:但是大多数时候没有人想要例外。此max行为是与C fmax(保证NaN传播)不同的定义的伪像,而是当比较为false时a<b ? b : a总是产生这样的行为a。NaN是“无序的”。任何其他数字,a < NaN总是错误的,也是这样NaN < b
— 彼得·科德斯

5

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

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

这是一个例子

a = {1, 2}
b = {2, 3}
print(max(b, a) != max(a, b))

输出量

True

在这里可能值得注意的是,Python中的“未定义结果”可能比其他某些语言更聪明。不会有鼻恶魔,而且它甚至都不会引发例外。它只是返回一个几乎任意的值(for min和max)或排序(for sorted)。
— Blckknght
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.