Max (a, b)! = Max (b, a) olacak şekilde bazı a, b var mı? [kapalı]


11

Python 3.x'te, bazıları var a, böyle max(a, b) != max(b, a)mi?

ave bbir dahili içinde piton tipte olması gerektiği ve herhangi bir dönüştürme içermezler.

Türü ave bolabilir: num, float, bool, list, tuple ...

Misal:

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

1
sorunuz açık değil
seralouk

Herhangi bir şey olduğunu sanmıyorum ... giriş olarak yinelenebilir bir nesne maxalır yerleşik bir işlevdir . Yani, a,baynı b,anedenle max(a,b)eşit olmalıdırmax(b,a)
Anwarvic

1
Bu iyi bir soru ama bunu düzenlemeli ve daha fazla açıklamalısınız
El.Hum

2
Düzenlemeniz yalnızca en çok oylanan cevabın altındaki yorumunuz bağlamında anlamlıdır. Orada ve burada, float('nan')bunun yerleşik bir tür olmadığını iddia edemezsiniz. "Yerleşik tip" in yeni bir şey oluşturmak zorunda kalmadan yaratabileceğiniz her şey anlamına geleceğini varsayıyorum class.
Teepeemm

2
Hariç tutmak istiyorsanız float('nan'), neden? Açık olmak float('nan')gerekirse, istediğiniz gibi bir şeyi hariç tuttuğunuz bir soru sormanıza izin verilir ; sorun bu değil. Sorun şu ki, kimse ne sormaya çalıştığınızdan emin değil.
Nat

Yanıtlar:


17

Bu tüm kriterleri karşılar:

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

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

Dışında herhangi karşılaştırmalar Bunun nedeni !=ya isile float("nan")her zaman return false.

Daha genel olarak, max(a, b) != max(b, a)türlerinin a, btoplam sipariş vermediği durumlarda sahip olabiliriz . Daniel Mesejo'nun belirttiği gibi setler de bu özelliğe sahiptir. Setler için <'katı altküme' anlamına gelir, ancak diğerinin katı bir altkümesi ile birlikte {1, 2}ve {3, 4}hiçbiri değildir, bu yüzden:

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

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

Bunun teknik olarak bir max(a, b) != max(b, a)nedeni yoktur 1 == True, ancak hala gözlemlenebilir bir fark vardır:

>>> max(True, 1)
True

>>> max(1, True)
1

1
VAY ... neden bu ??
Anwarvic

7
@ stackFF4 float("nan")yerleşik değilse ne olur? Kesinlikle yerleşik.
Eylül 19:29

9
@ stackFF4: float('nan')bir şamandıradır. Tam floatorada diyor , bu yüzden başka ne olmasını beklediğinizden emin değilim. İsterseniz kontrol edebilirsiniz type.
user2357112 Monica

1
@Anwarvic: İlginçtir, bu bir python işi değil, aslında şamandıraların donanımda nasıl uygulandığı. NaN, neredeyse her programlama dilinde yanlış olan her şeyi karşılaştırır.
Mooing Duck

2
@Nat: Ama kimse çoğu zaman istisnalar istemez. Bu maxdavranış, karşılaştırmadan yanlış olduğunda her zaman üretilen fmaxgibi bir şey olarak, onu C'den (NaN yayılımını garanti eden) farklı bir şekilde tanımlamanın bir eseridir . NaN "düzensiz" wrt'dir. başka herhangi bir sayı, her zaman yanlış, ve öylea<b ? b : aaa < NaNNaN < b
Peter Cordes

5

Belgelere göre max, setlerde kullanmak tanımsız sonuçlar üretir:

Buna göre, kümeler toplam sıralamaya bağlı işlevler için uygun argümanlar değildir (örneğin, min (), max () ve sort (), girdi olarak kümelerin bir listesi verildiğinde tanımsız sonuçlar üretir).

İşte bir örnek,

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

Çıktı

True

Burada, "tanımsız sonuçların" Python'da diğer dillerden daha aklı başında olduğunu belirtmek gerekir. Hiçbir burun cinler muhtemeldir, ve muhtemelen hatta bir istisna yükseltmez. Sadece çoğunlukla ( minve max) veya sipariş (için sorted) değerlerini döndürür .
Blckknght
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.