给定一个单词列表,返回一个按长度排序的单词列表(从长到短),第二排序标准应该是字母顺序。提示:你需要考虑两个函数。
到目前为止,这是我所拥有的内容:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
它按长度排序,但我不知道如何将第二标准应用于此排序,该标准是按字母降序排列。
你可以按照以下两个步骤完成:
the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Python的sort方法是稳定的,这意味着按长度对列表排序时,当长度相等时,元素将按字母顺序排列。
你也可以像这样做:
the_list.sort(key=lambda item: (-len(item), item))
通常你不需要使用cmp
,它甚至在Python3中已被删除。key
更容易使用。
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
sorted( sorted( iterable ), key=len )
能始终给出正确的答案。 - usersorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces ['bb', 'aa', 'b', 'a']
, but it should be ['aa', 'bb', 'a', 'b']
as get from sorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
- user-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']
首先按字母顺序排序,然后按长度排序。
这是一个可行的例子。
mylist.sort()
mylist = sorted(mylist, key=len, reverse=False)
# Print the items on individual line
for i in mylist:
print(i)
尽管Jochen Ritzel说你不需要cmp,但实际上,这是一个很好的运用场景!使用cmp,您可以同时按长度和字母顺序排序,只需要排序两次所需时间的一半!
def cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
例子:
>>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D']
>>> sorted(the_list, cmp=cmp_func)
['A', 'B', 'C', 'D', 'Z', 'AA', 'BB']
请注意,如果您的列表是大小写混合的,请将 cmp(a, b)
替换为 cmp(a.lower(), b.lower())
因为 Python 按字典序排序时 'a' > 'Z'。
在 Python3 中,您需要使用定义了 __lt__
样式比较函数或 functools.cmp_to_key()
自动为您完成此操作。 来对对象进行排序。
cmp
在Python 3中已经不存在了(正如你自己所说)。 - Jean-François Fabredef cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
-len(item)
。 - Anthony Awuley