2011-01-11 24 views
41

Şu anda python'da yeniyim ve bu soruya takılıp kaldım, uygun cevabı bulamıyorum.Dize uzunluğunu alfabetik sıraya göre sıralamak nasıl?

question: Kelimelerin bir listesi verildiğinde, aynı sözcükleri içeren bir listeyi uzunluk sırasına göre (en uzun ve en kısa) döndürerek, ikinci sıralama kriterleri alfabetik olmalıdır. İpucu: İki işlevi düşünmeniz gerekir.

def bylength(word1,word2): 
    return len(word2)-len(word1) 

def sortlist(a): 
    a.sort(cmp=bylength) 
    return a 

o uzunluğuyla sıralar ama alfabetik azalan gereğidir bu tür, ikinci kriterleri nasıl uygulanacağını bilmiyorum:

Bu defa ne var.

+1

http://stackoverflow.com/questions/ 4655591/python-sort-list - büyük bir cla ödevi gibi görünüyor ssroom ... – eumiro

cevap

84

Böyle iki adımda yapabilirsiniz:

the_list.sort() # sorts normally by alphabetical order 
the_list.sort(key=len, reverse=True) # sorts by descending length 

Python'un sıralama uzunluğu eşit olduğu zaman uzunluğuna göre sıralama listesinde alfabetik sırada unsurları bırakır, yani kararlıdır.

Ayrıca böyle yapabilirsiniz:

the_list.sort(key=lambda item: (-len(item), item)) 

Genellikle cmp gerek kalmaz, hatta Python3 uzaklaştırıldı. key kullanımı çok daha kolay.

+2

lambda çözümü awe-some! – dmeu

5
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy'] 

for i in reversed(sorted(n, key=len)): 
    print i 

yyyyy dddl dddd ccc bbb aaa

for i in sorted(n, key=len, reverse=True): 
    print i 

yyyyy dddd dddl aaa bbb ccc

1
-Sort your list by alpha order, then by length. 

See the following exmple: 

>>> coursesList = ["chemistry","physics","mathematics","art"] 
>>> sorted(coursesList,key=len) 
['art', 'physics', 'chemistry', 'mathematics'] 
>>> coursesList.append("mopsosa") 
>>> sorted(coursesList,key=len) 
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics'] 
>>> coursesList.sort() 
>>> sorted(coursesList,key=len) 
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics'] 
İlgili konular