ProgramlamaPython Geliştirici

Python'daki sorted() fonksiyonu nasıl çalışır, listelerin sort() metodundan farkı nedir, key anahtarının ve reverse parametresinin kullanımında hangi ince noktalar vardır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Soru Tarihi:

Başlangıçtan itibaren Python dili, koleksiyonları sıralamak için yerleşik araçlar sunmuştur. sort() metodları ve sorted() fonksiyonu Python'un ikinci versiyonunda ortaya çıktı, ancak Python 2.4'ten itibaren sorted() herhangi bir yinelemeli nesneyi (sadece listeleri değil) sıralamak için evrensel bir araç olarak tanıtıldı.

Sorun:

Verilerin farklı kriterlere göre sıralanması sık sık gerekmekte ve her zaman kaynak nesneyi değiştirmek istemeyebilirsiniz. Yeni başlayanlar sort() ve sorted() ve bunların nerede kullanıldığı konusunda kafa karışıklığı yaşar ve sıralama anahtarı ve ters sıra ile ilgili hatalar yapar.

Çözüm:

  • sorted(Iterable_Nesne, key=None, reverse=False) her zaman yeni bir liste nesnesi döndürür, kaynak nesneyi değiştirmeden.
  • list.sort(key=None, reverse=False) listeyi yerinde (in-place) sıralar ve None döndürür.
  • key parametresi, sıralama kriterini tanımlayan bir fonksiyondur.
  • reverse=True sıra düzenini ters çevirir.

Uzunluklarına göre listeleme örneği:

words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']

Temel Özellikler:

  • sorted() her zaman yeni bir liste döndürür, kaynağı değiştirmez
  • sort() yalnızca listenin kendisiyle çalışır, yeni bir nesne döndürmez
  • key seçeneği, karşılaştırma için değer döndüren herhangi bir fonksiyon olabilir.

Olası Sorular.

sort() metodu ne döndürür?

list.sort() metodu listenin kendisini sıralar ve her zaman None döndürür, bu çoğu zaman unutulmaktadır.

lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]

sort() ile bir demet sıralanabilir mi?

Hayır, demetler değiştirilemez ve .sort() metodu yoktur. Sıralama için sorted() kullanılmalıdır.

tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]

Eğer key'e farklı türler döndüren bir fonksiyon belirtilirse ne olur?

Karşılaştırılamayan değerler döndüğünde (örneğin, int ve str) TypeError hatası verir.

Tipik Hatalar ve Anti-Desenler

  • Yeni sıralanmış bir liste beklentisiyle sort() kullanmak
  • Değiştirilemez bir nesneyi sort() metodu ile sıralamaya çalışmak
  • key'e farklı türde değerler döndüren bir fonksiyon vermek

Gerçek Hayat Örneği

Olumsuz Durum

Görüşme sırasında uzunluğuna göre sıralanmış bir liste döndürmesi isteniyor, ancak aday aşağıdakini yapıyor:

lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None

Artılar:

  • Listeyi yerinde değiştirir (bazen bellek tasarrufu sağlar)

Eksiler:

  • None döndürdüğü için sonraki mantığı bozar

Olumlu Durum

Doğru kullanım:

lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']

Artılar:

  • Kaynak liste değiştirilmez
  • Beklenen sonucu alırız

Eksiler:

  • Yeni liste için ek bellek kullanır