SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012
  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Machinima

    Machinima

    17 Ocak 2006