No python 3.x, existem alguns a
, b
como esses max(a, b) != max(b, a)
?
a
e b
deve ser do tipo python interno e não contém nenhuma conversão.
O tipo de a
e b
pode ser: num, float, bool, list, tuple ...
Exemplo:
a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong
max
é uma função interna que aceita um objeto iterável como entrada. Portanto,a,b
é o mesmo que,b,a
portanto,max(a,b)
deve ser igualmax(b,a)
float('nan')
não é um tipo interno. Eu assumiria que "tipo interno" significaria qualquer coisa que você possa criar sem precisar criar um novoclass
.float('nan')
, por que? Para ser claro, você pode fazer uma pergunta na qual exclui algo comofloat('nan')
se quiser; esse não é o problema. O problema é que ninguém sabe ao certo o que você está tentando perguntar.Respostas:
Isso satisfaz todos os critérios:
Isso ocorre porque qualquer comparação que não seja
!=
ouis
comfloat("nan")
sempre retornar falso.De maneira mais geral, podemos ter
max(a, b) != max(b, a)
quando o (s) tipo (s) dea, b
não fornece um pedido total. Como Daniel Mesejo aponta, os sets também têm essa propriedade. Para conjuntos<
significa 'subconjunto estrito', mas com{1, 2}
e{3, 4}
nenhum é um subconjunto estrito do outro, portanto:Tecnicamente, este não tem
max(a, b) != max(b, a)
porque1 == True
, mas ainda há uma diferença observável:fonte
float("nan")
não estiver embutido, o que é? Certamente está embutido.float('nan')
é um flutuador. Está escritofloat
ali, então não tenho certeza do que mais você esperava que fosse. Você pode verificartype
se quiser.max
comportamento é um artefato de defini-lo de maneira diferente de Cfmax
(que garante a propagação de NaN), em vez disso, como algoa<b ? b : a
que sempre produza
quando a comparação é falsa. NaN é wrt "não ordenado". qualquer outro número, por issoa < NaN
é sempre falsa, e assim éNaN < b
De acordo com a documentação , o uso
max
de conjuntos produz resultados indefinidos:Aqui está um exemplo,
Resultado
fonte
min
emax
) ou pedido (parasorted
).