【发布时间】:2016-04-23 18:06:24
【问题描述】:
我有一个字符串列表,我必须按降序排序并返回,但我的代码不起作用。你能帮忙吗?
lst1 = 'Tadashi Takahiro Takao Takashi Takayuki Takehiko Takeo Takeshi Takeshi'
def lineup_students(string):
lst = string.split(' ')
return sorted(lst, key = len, reverse = True)
print lineup_students(lst1)
我的输出:
['Takahiro', 'Takayuki', 'Takehiko', 'Tadashi', 'Takashi', 'Takeshi', 'Takeshi', 'Takao', 'Takeo']
预期输出:
['Takehiko','Takayuki','Takahiro','Takeshi', 'Takeshi', 'Takashi','Tadashi','Takeo','Takao']
这个问题不是how to sort by length of string followed by alphabetical order? 或Python Sort List 的重复问题:遗憾的是,第一个问题和第二个问题都没有帮助我解决我的问题(但如果我遗漏了什么,请告诉我)
@Edit1:感谢 Mike 和 tobspr 为我提供了部分解决方案:
def lineup_students(string):
lst = string.split(' ')
return sorted(lst, key=lambda x: (len(x), x), reverse=True)
def lineup_students(string):
lst = string.split(' ')
lst.sort(reverse=True)
lst.sort(key=len, reverse=True)
return lst
关键是代码似乎不适用于此名称列表:
['Shigekazu', 'Takeshi', 'Senichi', 'Ryuichi', 'Yoshio', 'Toshio', 'Noboru',
'Mitsuo', 'Rafu', '']
应该等于
['Shigekazu', 'Takeshi', 'Senichi', 'Ryuichi', 'Yoshio', 'Toshio', 'Noboru',
'Mitsuo', 'Rafu']
@edit2:这个答案似乎有效:
def lineup_students(s):
return sorted(s.split(), key=lambda i:(len(i),i), reverse=True)
【问题讨论】:
-
你链接的问题的答案有什么问题?
-
先尝试 alpha-sort,然后 len
-
如果我使用 reversed(sorted(lst)) 输出是
-
我看不到您如何达到预期的输出。实际输出对我来说看起来不错
-
@mike.k 你能把代码贴出来吗?
标签: python string list python-2.7 sorting