2014-07-08 24 views
5

Sıralamak istediğim dizelerim var.Python'daki harflerden sonra dizeleri ve yer numaralarını sırala

Varsayılan olarak, harfler, sıralanmış bir listede en son yerleştirilen sayılardan (veya dize numaralarından) daha büyük bir değere sahiptir.

>>> 'a' > '1' 
True 
>>> 'a' > 1 
True 

Listenin altındaki bir numarayla başlayan tüm dizeleri yerleştirmek istiyorum.

Örnek:

Boylanmamış listesi:

['big', 'apple', '42nd street', '25th of May', 'subway'] 

Python'un varsayılan sıralama:

['25th of May', '42nd street', 'apple', 'big', 'subway'] 

Talep sıralama:

cevap

10
>>> a = ['big', 'apple', '42nd street', '25th of May', 'subway'] 
>>> sorted(a, key=lambda x: (x[0].isdigit(), x)) 
['apple', 'big', 'subway', '25th of May', '42nd street'] 

Python'un sıralama işlevleri, sıralamadan önce uygulanan bir işlevi belirtmenize olanak tanıyan isteğe bağlı parametresini alır. Tupllar ilk elementlerine göre sıralanırlar, ve sonra ikincisi, vb.

here sıralama hakkında daha fazla bilgi alabilirsiniz.

+5

Bu, OP'nin tam olarak istediği şeyi yapar. Bununla birlikte, bunun [doğal sıralama] yapamayacağını belirtmek gerekir (http://stackoverflow.com/questions/4836710/does-python-have-a-built-in-function-for-string-natural-sort) dize numaraları, '' 2'' sonra '' 11 '' listelenir. –

+0

@ LukasGraf İyi bir nokta. – grc

+0

+1. Eğer listeniz tamsayılar içeriyorsa, 'x'' str() ':' dizininde sıralanır (a, anahtar = lambda x: (str (x) [0] .isdigit(), str (x)) ' –