max(a、b)!= max(b、a)となるa、bはありますか?[閉まっている]


11

Python 3.xにはabそのようなものはありmax(a, b) != max(b, a)ますか?

aそして、b内蔵のpythonの型でなければなりませんし、任意の変換を含んでいません。

aおよびのタイプb:num、float、bool、list、tuple ...

例:

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

1
あなたの質問は明確ではありません
seralouk '20 / 10/20

私は何もないと思います... maxは、反復可能なオブジェクトを入力として受け取る組み込み関数です。したがって、a,b同じでなければならないb,aので、同じでmax(a,b)なければなりませんmax(b,a)
アンワルビック

1
これは良い質問ですが、編集してさらに説明する必要があります
El.Hum

2
編集は、最も投票された回答の下のコメントのコンテキストでのみ意味があります。あちこちで、あなたはそれfloat('nan')が組み込み型ではないと主張することに失敗しました。「組み込み型」とは、新しいを作成しなくても作成できるすべてのものを意味すると思いますclass
-Teepeemm

2
除外したい場合float('nan')は、なぜですか?明確にするために、必要にfloat('nan')応じて何かを除外する質問をすることが許可されています。それは問題ではありません。問題は、あなたが尋ねようとしていることが誰にもわからないということだけです。
ナット・

回答:


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が指摘するように、セットにもこの特性があります。セット<は「厳密なサブセット」を意味しますが、with はどちらも他方の厳密なサブセットでは{1, 2}あり{3, 4}ません。

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

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

この1は技術的に持っていないmax(a, b) != max(b, a)ので1 == True、しかし、観察可能な違いがまだあります:

>>> max(True, 1)
True

>>> max(1, True)
1

1
WOW ...なぜですか?
Anwarvic

7
@ stackFF4 float("nan")が組み込まれていない場合、それは何ですか?それは確かに組み込まれています。
sanyash

9
@ stackFF4:float('nan')浮動小数点数です。floatすぐそこに書いてあるので、他に何を期待していたのかわかりません。type必要に応じて確認できます。
user2357112は、

1
@Anwarvic:興味深いことに、これはpythonではなく、実際にフロートがハードウェアに実装されている方法です。NaNは、ほぼすべてのプログラミング言語のすべてとfalseを比較します。
Mooing Duck、

2
@Nat:しかし、ほとんどの場合、例外は必要ありません。このmax動作は、比較がfalseのときに常に生成されるfmaxようなものとしてではなく、C (NaN伝播を保証する)とは異なる方法で定義することによるアーティファクトです。NaNは「順序付けされていない」wrtです。その他の数値、常に偽り、そうでない場合a<b ? b : aaa < NaNNaN < b
Peter Cordes

5

ドキュメントによると、maxセットで使用すると未定義の結果が生成されます:

したがって、セットは、全体の順序付けに依存する関数の適切な引数ではありません(たとえば、入力としてセットのリストを指定すると、min()、max()、sorted()は未定義の結果を生成します)。

ここに例があります

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

出力

True

「未定義の結果」は、他のいくつかの言語よりもPythonでおそらくより健全であることは、ここで注目に値するかもしれません。いいえ鼻悪魔はそうではない、それはおそらく例外を発生しません。ほとんど任意の値(for minおよびmax)または順序付け(for sorted)を返すだけです。
Blckknght
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.