Dalam python 3.x, ada beberapa a
, b
sehingga max(a, b) != max(b, a)
?
a
dan b
harus dari tipe python bawaan dan tidak mengandung konversi apa pun.
Jenis a
dan b
dapat: num, mengambang, bool, daftar, tuple ...
Contoh:
a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong
max
adalah fungsi built-in yang mengambil objek iterable sebagai input. Jadi,a,b
sama denganb,a
karenanyamax(a,b)
harus samamax(b,a)
float('nan')
itu bukan tipe bawaan. Saya menganggap "tipe bawaan" akan berarti apa pun yang dapat Anda buat tanpa harus membuat yang baruclass
.float('nan')
, lalu mengapa? Agar jelas, Anda diizinkan untuk mengajukan pertanyaan yang mengecualikan sesuatu sepertifloat('nan')
jika Anda ingin; bukan itu masalahnya. Masalahnya hanya tidak ada yang yakin apa yang ingin Anda tanyakan.Jawaban:
Ini memenuhi semua kriteria:
Ini karena setiap perbandingan selain
!=
atauis
denganfloat("nan")
selalu mengembalikan false.Lebih umum, kita dapat memiliki
max(a, b) != max(b, a)
ketika jenisa, b
tidak memberikan pesanan total. Seperti yang ditunjukkan Daniel Mesejo, set juga memiliki properti ini. Untuk set<
berarti 'subset ketat', tetapi dengan{1, 2}
dan{3, 4}
tidak ada subset ketat dari yang lain, jadi:Yang ini secara teknis tidak ada
max(a, b) != max(b, a)
karena1 == True
, tetapi masih ada perbedaan yang bisa diamati:sumber
float("nan")
tidak built-in, lalu apa? Sudah pasti built-in.float('nan')
adalah float. Dikatakanfloat
di sana, jadi saya tidak yakin apa lagi yang Anda harapkan. Anda dapat memeriksanyatype
jika mau.max
perilaku adalah artefak mendefinisikan secara berbeda dari Cfmax
(yang menjamin propagasi NaN), bukan sebagai sesuatu sepertia<b ? b : a
yang selalu menghasilkana
ketika perbandingan adalah palsu. NaN adalah "unordered" wrt. nomor lain, begitua < NaN
juga selalu salah, dan begitu pulaNaN < b
Menurut dokumentasi , menggunakan
max
set menghasilkan hasil yang tidak ditentukan:Berikut ini sebuah contoh,
Keluaran
sumber
min
danmax
) atau memesan (untuksorted
).