functools.cmp_to_key ile Özel Sıralama
Anahtarlar yetersiz kaldığında bir karşılaştırıcı yazın.
functools.cmp_to_key ile Özel Sıralama, CoddyKit'te ücretsiz bir Competitive Programming Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Competitive Programming Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Competitive Programming Academy kursu toplamda 4 dersten oluşur.
Bir key İfade Edemediğinde
Bazı sıralamalar, her öğenin tek bir değerine değil, iki öğenin birlikte karşılaştırılmasına bağlıdır. Bu durumda key yerine bir karşılaştırıcı işlevi yazarsınız.
Bir Karşılaştırıcı Ne Döndürür
Bir karşılaştırıcı, a ve b adlı iki öğe alır. a önce geliyorsa negatif, b önce geliyorsa pozitif, eşitlerse sıfır bir sayı döndürün.
def cmp(a, b):
if a < b: return -1
if a > b: return 1
return 0cmp_to_key ile Uyarlayın
Python sort yalnızca bir key kabul eder. Bu nedenle karşılaştırıcınızı kullanılabilir bir key'e dönüştürmek için functools.cmp_to_key ile sarın.
from functools import cmp_to_key
items.sort(key=cmp_to_key(cmp))Klasik En Büyük Sayı Problemi
Sayıları birleştirerek en büyük dizeyi oluşturmak için ikilileri, hangi birleştirmenin daha büyük olduğuna göre karşılaştırın. Basit bir key bunu ifade edemez.
def cmp(a, b):
return (a + b < b + a) - (a + b > b + a)Bu Karşılaştırma Hilesini Okuyun
İfade, a+b daha büyük bir birleştirme olduğunda -1 döndürür; bu nedenle a, b'den önce sıralanır. Böylece oluşturulabilecek en büyük sayı elde edilir.
nums = ["3", "30", "34"]
nums.sort(key=cmp_to_key(cmp))
print("".join(nums)) # 34330Önemli Olan İşarettir
Sıralama yalnızca sonucun işaretini okur. -2 veya -100 döndürmek, -1 ile aynı şekilde davranır; bu nedenle tam büyüklük konusunda endişelenmeyin.
Karşılaştırıcıları Tutarlı Tutun
Karşılaştırıcınız tutarlı olmalıdır: a, b'den üstün ve b de c'den üstünse a da c'den üstün olmalıdır. Çelişkiler anlamsız bir sıra oluşturur.
Mümkünse key'i Tercih Edin
Bir key her öğe için bir kez hesaplanır; karşılaştırıcı ise birçok ikili üzerinde çalışır ve daha yavaştır. Yalnızca key gerçekten işe yaramadığında cmp_to_key kullanın.
Çıkarma Kısayolu
Sayısal karşılaştırmalarda doğrudan a - b döndürebilirsiniz; çünkü işareti zaten sırayı belirtir. Tam sayılar için kısa ve güvenlidir.
items.sort(key=cmp_to_key(lambda a, b: a - b))Ondalıklı Sayılara Dikkat Edin
Ondalıklı sayılarda a - b işlemi çok küçük bir değere veya sıfıra yuvarlanabilir. Hatalı eşitlikleri önlemek için açık dallanmalarla karşılaştırın.
Karşılaştırıcılar Özel Sıralamaların Önünü Açar
Birleştirme sırası, özel sıralamalar ve kurala dayalı eşitliklerin tümü mümkün hâle gelir. Bir karşılaştırıcı, karmaşık sıralamalar için başvurabileceğiniz çözümdür.
Hızlı Kontrol
Karşılaştırıcınız cmp(a, b) için negatif bir sayı döndürüyor.
Özet
Bir karşılaştırıcıyı cmp_to_key ile sararak key'in ifade edemediği sıralamaları uygulayabilirsiniz. Bir işaret döndürün, tutarlı kalın ve mümkün olduğunda key'leri tercih edin. 🧩
Sıkça Sorulan Sorular
“functools.cmp_to_key ile Özel Sıralama” dersi ücretsiz mi?
Evet — “functools.cmp_to_key ile Özel Sıralama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Competitive Programming Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Competitive Programming Academy kursu toplamda 4 dersten oluşur.
“functools.cmp_to_key ile Özel Sıralama” dersinde ne öğreneceğim?
Anahtarlar yetersiz kaldığında bir karşılaştırıcı yazın. Competitive Programming Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Competitive Programming Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Competitive Programming Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“functools.cmp_to_key ile Özel Sıralama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Competitive Programming Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Competitive Programming Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- sorted() ve key İşlevi
- Birden Çok Alana Göre Sıralama
- functools.cmp_to_key ile Özel Sıralama
- Önce Sıralamanın Çözümlerin Önünü Açması