29 Ocak 2011, CUMARTESİ
Python dize işlevi doğal yapılı bir tür var mı?
Kullanarak Python 3.x, doğal alfabetik bir sıralama yapmak istiyorum dizeleri bir listesi var.
Doğal sıralama:Hangi Windows dosyaları siparişi sınıflandırılmaktadır.
Örneğin, aşağıdaki listede, doğal olarak istediğim () sıralanır:
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
Ve işte "" listesinin en üstünde versiyon var ne ():. halloldu
['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']
İlki gibi davranan bir tür fonksiyon arıyorum.
CEVAP
29 Ocak 2011, CUMARTESİ
Bunu deneyin:
import re
def natural_sort(l):
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9] )', key) ]
return sorted(l, key = alphanum_key)
Çıkış:
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
Bu çalışma çevrimiçi bakın: ideone.
Kodu buraya uyarlanmıştır: Sorting for Humans : Natural Sort Order.
Bunu Paylaş:
Python alt yöntem içeren bir dize var ...
Python ile bir dize bir dize için bir ...
Python katılın, neden dize.liste yerin...
Nasıl bir dize bir sayı (yüzen) olup o...
İşlevi'Python adı s ile bir dized...