2011-01-11 14 views
41

私は現在Pythonには新しく、この質問に固執していますが、適切な答えを見つけることができないようです。アルファベット順の文字列の長さでソートする方法は?

質問:単語のリストを指定すると、同じ単語を長さ(最長から最短)の順に並べたリストを返します.2番目の並べ替え基準はアルファベット順にする必要があります。ヒント:2つの機能を考える必要があります。

これは私がこれまで持っているものです。

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

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

それは長さでソートするが、私はアルファベットの降順であり、この種の、に2つ目の基準を適用する方法がわかりません。あなたはこのような二つのステップでそれを行うことができます

+1

http://stackoverflow.com/questions/ 4655591/python-sort-list - 大きなclaの宿題のように見えるssroom ... – eumiro

答えて

84

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

Pythonのソートは、長さが等しい場合の長さでリストをソートすると、アルファベット順に要素を残していることを意味し、安定しています。あなたはまた、このようにそれを行うことができます

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

一般的にあなたがcmpを必要としません、それはさえのpython3で削除されました。 keyはずっと使いやすくなっています。

+2

ラムダソリューションは畏敬の念です! – dmeu

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

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

YYYYY dddl DDDD CCC AAA、BBB

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'] 
関連する問題