Python'da alfabetik olarak sıralanmış bir liste oluşturmanın en iyi yolu nedir?
Temel cevap:
mylist = ["b", "C", "A"]
mylist.sort()
Bu, orijinal listenizi değiştirir (yani yerinde sıralar). Orijinali değiştirmeden listenin sıralanmış bir kopyasını almak için sorted()
fonksiyonunu kullanın:
for x in sorted(mylist):
print x
Ancak, yukarıdaki örnekler biraz naiftir, çünkü yerel ayarı dikkate almazlar ve büyük/küçük harfe duyarlı bir sıralama yaparlar. Özel sıralama düzenini belirtmek için isteğe bağlı key
parametresinden yararlanabilirsiniz (alternatif olarak cmp
kullanmak, birden çok kez değerlendirilmesi gerektiğinden kullanımdan kaldırılmış bir çözümdür - key
öğe başına yalnızca bir kez hesaplanır).
Yani, dile özgü kuralları dikkate alarak geçerli yerel ayara göre sıralama yapmak (cmp_to_key
functools'tan bir yardımcı işlevdir):
sorted(mylist, key=cmp_to_key(locale.strcoll))
Ve son olarak, ihtiyacınız varsa, sıralama için bir özel yerel ayar belirtebilirsiniz:
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']
Son not: lower()
yöntemini kullanan büyük/küçük harfe duyarlı olmayan sıralama örnekleri göreceksiniz - bunlar yanlıştır, çünkü yalnızca ASCII karakter alt kümesi için çalışırlar. Bu ikisi İngilizce olmayan veriler için yanlıştır:
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
Ancak bu, dile özgü sıralama kurallarını nasıl ele alır? Yerel ayarı dikkate alıyor mu?
Hayır, list.sort()
genel bir sıralama işlevidir. Unicode kurallarına göre sıralama yapmak istiyorsanız, özel bir sıralama anahtarı işlevi tanımlamanız gerekir. pyuca](http://jtauber.com/blog/2006/01/27/python_unicode_collation_algorithm/) modülünü kullanmayı deneyebilirsiniz, ancak ne kadar eksiksiz olduğunu bilmiyorum.