Urutan Kustom dengan functools.cmp_to_key
Menulis pembanding saat key tidak memadai
Urutan Kustom dengan functools.cmp_to_key adalah pelajaran Coding Interview Prep 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 Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep 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. 🧩
Belajar Coding Interview Prep dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 90
- Pelajaran
- 360
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 Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep 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 Coding Interview Prep 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 Coding Interview Prep?
Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep 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 Coding Interview Prep ini?
Ya. Setiap pelajaran Coding Interview Prep 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