Urutan Kustom dengan functools.cmp_to_key
Menulis pembanding saat key tidak memadai
Urutan Kustom dengan functools.cmp_to_key adalah pelajaran Competitive Programming Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Competitive Programming Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Competitive Programming Academy mencakup 4 pelajaran total.
Saat key Tidak Dapat Menyatakannya
Beberapa urutan bergantung pada perbandingan dua item secara bersamaan, bukan masing-masing satu nilai. Untuk kasus tersebut, Anda menulis fungsi pembanding alih-alih key.
Apa yang Dikembalikan Pembanding
Pembanding menerima dua item a dan b. Kembalikan bilangan negatif jika a berada lebih dahulu, positif jika b berada lebih dahulu, dan nol jika keduanya seri.
def cmp(a, b):
if a < b: return -1
if a > b: return 1
return 0Hubungkan dengan cmp_to_key
sort Python hanya menerima key, jadi bungkus pembanding Anda dengan functools.cmp_to_key agar berubah menjadi key yang dapat digunakan.
from functools import cmp_to_key
items.sort(key=cmp_to_key(cmp))Masalah Klasik Bilangan Terbesar
Untuk menggabungkan bilangan menjadi string terbesar, bandingkan pasangan berdasarkan penggabungan mana yang lebih besar. key biasa tidak dapat menangkap aturan ini.
def cmp(a, b):
return (a + b < b + a) - (a + b > b + a)Pahami Trik Perbandingan Itu
Ekspresi tersebut mengembalikan -1 ketika a+b menghasilkan gabungan yang lebih besar, sehingga a diurutkan sebelum b. Dengan begitu, terbentuk bilangan terbesar yang mungkin.
nums = ["3", "30", "34"]
nums.sort(key=cmp_to_key(cmp))
print("".join(nums)) # 34330Yang Penting Adalah Tandanya
Pengurutan hanya membaca tanda hasilnya. Mengembalikan -2 atau -100 berperilaku sama seperti -1, jadi Anda tidak perlu mengkhawatirkan besar nilai pastinya.
Jaga Konsistensi Pembanding
Pembanding Anda harus konsisten: jika a mengungguli b dan b mengungguli c, maka a harus mengungguli c. Kontradiksi menghasilkan urutan yang kacau.
Utamakan key Jika Memungkinkan
key dihitung sekali untuk setiap item, tetapi pembanding dijalankan pada banyak pasangan sehingga lebih lambat. Gunakan cmp_to_key hanya ketika key benar-benar tidak dapat digunakan.
Pintasan Pengurangan
Untuk perbandingan numerik, Anda dapat langsung mengembalikan a - b karena tandanya sudah menyatakan urutannya. Singkat dan aman untuk bilangan bulat.
items.sort(key=cmp_to_key(lambda a, b: a - b))Waspadai Bilangan Pecahan
Pada bilangan pecahan, a - b dapat dibulatkan menjadi nilai yang sangat kecil atau nol. Lakukan perbandingan dengan cabang eksplisit untuk menghindari seri yang salah.
Pembanding Membuka Urutan Khusus
Urutan penggabungan, peringkat khusus, dan seri berdasarkan aturan semuanya menjadi mungkin. Pembanding adalah jalan keluar untuk pengurutan yang rumit.
Pemeriksaan Cepat
Pembanding Anda mengembalikan bilangan negatif untuk cmp(a, b).
Ringkasan
Anda dapat membungkus pembanding dengan cmp_to_key untuk menyatakan urutan yang tidak dapat diungkapkan oleh key. Kembalikan tandanya, jaga konsistensi, dan utamakan key jika memungkinkan. 🧩
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Urutan Kustom dengan functools.cmp_to_key” gratis?
Ya — teks lengkap “Urutan Kustom dengan functools.cmp_to_key” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Competitive Programming Academy, upgrade ke CoddyKit PRO. Kursus Competitive Programming Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Urutan Kustom dengan functools.cmp_to_key”?
Menulis pembanding saat key tidak memadai Kamu berlatih Competitive Programming Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Competitive Programming Academy?
Tidak diperlukan pengalaman sebelumnya. Competitive Programming Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Urutan Kustom dengan functools.cmp_to_key” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Competitive Programming Academy ini?
Ya. Setiap pelajaran Competitive Programming Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- sorted() dan Fungsi key
- Mengurutkan Berdasarkan Banyak Field
- Urutan Kustom dengan functools.cmp_to_key
- Mengapa Mengurutkan Dahulu Membuka Solusi