0Pricing
Competitive Programming Academy · Pelajaran

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 0

Hubungkan 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))   # 34330

Yang 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

  1. sorted() dan Fungsi key
  2. Mengurutkan Berdasarkan Banyak Field
  3. Urutan Kustom dengan functools.cmp_to_key
  4. Mengapa Mengurutkan Dahulu Membuka Solusi
← Kembali ke Competitive Programming Academy