Yanıtlar:
Temel cevap:
mylist = ["b", "C", "A"]
mylist.sort()
Bu, orijinal listenizi değiştirir (örn. Yerinde sıralar). Orijinali değiştirmeden listenin sıralı bir kopyasını almak için şu sorted()
işlevi kullanın :
for x in sorted(mylist):
print x
Bununla birlikte, yukarıdaki örnekler biraz naiftir, çünkü yerel ayarları dikkate almazlar ve büyük / küçük harfe duyarlı bir sıralama gerçekleştirirler. key
Özel sıralama düzenini belirtmek için isteğe bağlı parametreden yararlanabilirsiniz (alternatif, cmp
birden çok kez değerlendirilmesi gerektiği için kullanımdan kaldırılmış bir çözümdür - key
öğe başına yalnızca bir kez hesaplanır).
Bu nedenle, geçerli yerel ayara göre sıralamak, dile özgü kuralları dikkate alarak ( cmp_to_key
functools'un yardımcı bir işlevidir):
sorted(mylist, key=cmp_to_key(locale.strcoll))
Son olarak, gerekirse, sıralama için özel bir 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öntemi kullanan büyük / küçük harfe duyarsız sıralama örnekleri görürsünüz - bunlar yanlıştır, çünkü yalnızca karakterlerin ASCII 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)
mylist.sort(key=str.lower)
daha hızlı.
[1, 2, 3].sort()
. Gibi sort()
türlü yerinde listesi (yani doğrudan listeyi değiştirir), bu sıralı liste dönmek ve aslında bir şey dönmez, yazdırma deyimi baskılar öylesine vermez None
. Listenizi diyelim x
, çağrılan bir değişkene kaydettiyseniz x.sort()
,print(x)
, sen sıralı bir liste görecekti.
Ayrıca sorted()
işlevi belirtmeye değer :
for x in sorted(list):
print x
Bu, orijinal listeyi değiştirmeden listenin yeni, sıralanmış bir sürümünü döndürür.
Dizeleri sıralamanın doğru yolu:
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'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']
# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']
Önceki örneği mylist.sort(key=lambda x: x.lower())
yalnızca ASCII bağlamları için iyi çalışır.
Lütfen Python3'te sort () işlevini kullanın
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
Ancak bu, dile özgü sıralama kurallarını nasıl işler? Yerel ayarları dikkate alıyor mu?
Hayır, list.sort()
genel bir sıralama işlevidir. Unicode kurallarına göre sıralamak istiyorsanız, özel bir sıralama tuşu işlevi tanımlamanız gerekir. Pyuca modülünü kullanmayı deneyebilirsiniz , ancak ne kadar eksiksiz olduğunu bilmiyorum.
Eski soru, ancak ayar yapmadan yerel ayarlara uygun sıralama locale.LC_ALL
yapmak istiyorsanız, bu cevabın önerdiği şekilde PyICU kütüphanesini kullanarak bunu yapabilirsiniz :
import icu # PyICU
def sorted_strings(strings, locale=None):
if locale is None:
return sorted(strings)
collator = icu.Collator.createInstance(icu.Locale(locale))
return sorted(strings, key=collator.getSortKey)
Sonra örneğin:
new_list = sorted_strings(list_of_strings, "de_DE.utf8")
Bu, herhangi bir yerel ayar yüklemeden veya diğer sistem ayarlarını değiştirmeden benim için çalıştı.
(Bu zaten yukarıdaki bir yorumda önerildi , ancak daha fazla önem vermek istedim, çünkü ilk başta kendimi özledim.)
varsaymak s = "ZWzaAd"
Dizenin üzerinde sıralamak için basit çözüm birin altında olacaktır.
print ''.join(sorted(s))
Ya da belki:
names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
Çok basit: https://trinket.io/library/trinkets/5db81676e4
scores = '54 - Alice,35 - Bob,27 - Carol,27 - Chuck,05 - Craig,30 - Dan,27 - Erin,77 - Eve,14 - Fay,20 - Frank,48 - Grace,61 - Heidi,03 - Judy,28 - Mallory,05 - Olivia,44 - Oscar,34 - Peggy,30 - Sybil,82 - Trent,75 - Trudy,92 - Victor,37 - Walter'
score = x için sıralanmış (puan) olarak split (','): yazdır (x)
locale
Mevcut yerel ayara göre doğal olarak sıralamak için kullanın ve dize harmanlama yöntemlerini kullanın.