Soru Tarihi:
sort() metodu, Python'un ilk versiyonlarından beri list tipiyle birlikte yerleşiktir, sorted() fonksiyonu ise Python 2.4'te ortaya çıkmıştır. Koleksiyonları sıralamak, programlamada en sık karşılaşılan görevlerden biridir ve Python bu sorunu çözmek için iki temel araç sunar.
Sorun:
Pek çok yeni başlayan, sort() (liste metodu) ve sorted() (yüksek seviyeli fonksiyon) arasındaki farkı karıştırmaktadır. Ne zaman yerinde sıralama yapılacağı, hangi nesnelerin sıralanabileceği, key/reverse ile özelleştirilmiş bir sıralama düzeninin nasıl ayarlanacağı ve özellikle karmaşık kullanıcı yapılarına yönelik potansiyel tuzaklar hakkında bir anlayış yoktur.
Çözüm:
list.sort() orijinal listeyi yerinde sıralar ve None döndürür. Başlangıç nesnesini değiştirir.sorted() yeni sıralanmış bir liste (veya başka bir tür, farklı bir şey geçilirse) döndürür, orijinalini değiştirmeden çalışır. Herhangi bir yinelemeli nesneyle çalışır (hatta jeneratörlerle bile).key (sıralama fonksiyonu) ve reverse (ters sırayla sıralama için mantıksal bayrak) parametrelerini destekler.Kod örneği:
numbers = [5, 2, 9, 1] numbers.sort() # numbers = [1, 2, 5, 9] words = ['aaa', 'ZZZ', 'bbb'] sorted_words = sorted(words, key=str.lower, reverse=True) # sorted_words = ['ZZZ', 'bbb', 'aaa'] # words değişmez
Ana özellikler:
sort() yalnızca listelerle çalışır ve yerinde sıralar; sorted() daha evrenseldir — her türlü yinelemeli nesneyle çalışır.my_list = my_list.sort() yaparsak, değişken ne döner?
Cevap: my_list None olacaktır, çünkü sort listeyi yerinde sıralar ve None döndürür. Bu yaygın bir hata: her zaman atama yapmadan yerinde sıralama yapın veya yeni bir liste olarak sıralanmış bir nesneye ihtiyacınız varsa sorted’ı kullanın.
Kod örneği:
lst = [3, 1, 2] lst = lst.sort() # lst artık None
Sort() metodu ile bir demet veya string sıralanabilir mi?
Cevap: Hayır, değiştirilemez nesnelerin (tuple, str) sort metodu yoktur, ancak öğelerden yeni sıralı bir liste döndüren sorted() uygulanabilir.
Kod örneği:
tpl = (4, 2, 7) sorted_tpl = sorted(tpl) # sorted_tpl = [2, 4, 7]
Farklı türlerdeki öğeleri içeren bir liste sıralanabilir mi?
Cevap: Python 3'te farklı karşılaştırılamayan türlerin (örneğin, int ve str) sıralaması TypeError hatası verir. Python 2'de belirli bir sıralama düzeni vardı, şimdi tüm değerleri karşılaştırılabilir bir forma genellemek için key fonksiyonunu açıkça belirtmek gereklidir.
Olumsuz Durum
Programcı my_list = my_list.sort() yaptıktan sonra orijinal listeye erişimini kaybetti, çünkü değişkene None değeri atandı.
Artılar:
Eksiler:
Olumlu Durum
Yeni bir versiyon elde etmek için dikkatli bir sorted() kullanıldı veya sort düzgün bir şekilde uygulandı ve atama yapılmadı.
Artılar:
Eksiler: