Nasıl dizeleri listesini sıralamak için?

oy
321

Python alfabetik olarak sıralanmış listesi oluşturma en iyi yolu nedir?

Oluştur 30/08/2008 saat 18:03
kaynak kullanıcı
Diğer dillerde...                            


10 cevaplar

oy
33
list.sort()

Gerçekten bu kadar basit :) olduğunu

Cevap 30/08/2008 saat 18:04
kaynak kullanıcı

oy
413

Temel cevap:

mylist = ["b", "C", "A"]
mylist.sort()

Bu, ilk liste (yani türlü yerinde) değiştirir. Orijinali değiştirmeden, listenin bir sıralanmış kopyasını almak için kullanmak sorted()işlevi:

for x in sorted(mylist):
    print x

Onlar hesaba yerel almak ve bir harf duyarlı sıralamayı yapmazlar çünkü Ancak, yukarıda örnekleri, biraz safsın. Sen isteğe bağlı parametre yararlanabilir key(kullanarak, alternatif sırasını sıralama özel belirtmek için cmpbirden çok kez değerlendirilecek olduğu gibi, kullanımdan kaldırılmış bir çözümdür, - keysadece elemanın başına bir kez hesaplanır).

Yani, (hesaba dile özgü kuralları alarak Yerele özgü sıralamak cmp_to_keyfunctools bir yardımcı fonksiyonudur):

sorted(mylist, key=cmp_to_key(locale.strcoll))

Eğer gerekiyorsa Ve son olarak, bir belirtebilirsiniz özel yerel sıralamak için:

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: Kullandığınız harf duyarsız sıralama örneklerini göreceksiniz lower()yöntemi - onlar karakterlerin ASCII alt kümesi için işe yarar çünkü bu, yanlıştır. O ikisi İngilizce olmayan veriler için yanlış:

# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
Cevap 30/08/2008 saat 18:10
kaynak kullanıcı

oy
10

Ama nasıl özgü bu sap dil ​​sıralama kuralları nedir? o hesaba yerel alıyor mu?

Hayır, list.sort()genel bir sıralama fonksiyonudur. Unicode kurallarına göre sıralamak isterseniz, özel sıralama anahtarı işlevini tanımlamak gerekecek. Sen kullanmayı deneyebilirsiniz pyuca modülü, ama ne kadar tam bilmiyorum.

Cevap 30/08/2008 saat 19:10
kaynak kullanıcı

oy
43

Ayrıca fazlalaştı sorted()işlevi:

for x in sorted(list):
    print x

Bu orijinal listeyi değiştirmeden bir listenin yeni, sıralı sürümünü döndürür.

Cevap 30/08/2008 saat 23:14
kaynak kullanıcı

oy
18

dizeleri sıralamak için uygun bir yoldur:

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 örnek mylist.sort(key=lambda x: x.lower())yalnızca ASCII bağlamlar için iyi çalışır.

Cevap 28/10/2009 saat 23:45
kaynak kullanıcı

oy
1

varsaymak s = "ZWzaAd"

basit bir çözüm birinin altında olacaktır yukarıdaki dize sıralamak için.

print ''.join(sorted(s))
Cevap 12/05/2017 saat 06:16
kaynak kullanıcı

oy
4

Python3 sıralanma () işlevini kullanın

items = ["love", "like", "play", "cool", "my"]
sorted(items2)
Cevap 27/12/2017 saat 13:24
kaynak kullanıcı

oy
0

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()))
Cevap 13/08/2018 saat 15:46
kaynak kullanıcı

oy
0

Eski bir soru, ama yapmak istiyorsanız ayarlamadan yerel ayara duyarlı tasnif locale.LC_ALL kullandığınız yapabilirsiniz PyICU kütüphanesi tarafından önerildiği gibi bu cevap :

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 ör ile çağrı:

new_list = sorted_strings(list_of_strings, "de_DE.utf8")

Bu, herhangi bir yerel ayarları yükleyerek ya da diğer sistem ayarlarını değiştirmeden benim için çalıştı.

(Bu zaten öne sürüldü yukarıda yorumunda , ama ilk başta kendim cevapsız çünkü ona daha fazla önem vermek istedik.)

Cevap 28/08/2019 saat 15:39
kaynak kullanıcı

oy
0
l =['abc' , 'cd' , 'xy' , 'ba' , 'dc']
l.sort()
print(l1)

Sonuç

[ 'ABC', 'ba', 'cd', 'dc', 'xy']

Cevap 07/12/2019 saat 10:21
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more