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:
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.
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:
Eksiler:
Doğru kullanım:
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
Artılar:
Eksiler: