我有一个字符串列表,我想根据给定字符串中的点数(。)进行排序,如果这些字符串中的点数相等,我希望它们按长度排序。(两者都在降序不应该是一个问题)
第一部分可以轻松实施
given_list.sort(key=dots,reverse=True)
点功能已实现且工作正常。
这是我被卡住的地方,因为如果点数相等,我无法根据它们的长度对已经排序的列表进行排序。
这让我觉得我应该以某种方式使用lambda来定制关键参数,但它并没有真正起作用,但它确实适用于嵌套列表或字典。
我该如何完成这项工作?
答案 0 :(得分:4)
您可以将自定义lambda函数作为排序键传递给已排序的方法。
在这种情况下,我使用lambda x: (x.count("."), len(x))
,它将创建一个计数和长度的复合键,并相应地排序:
>>> given_list = ["e.x.a", "m.p.l.e", "ex.am.ple"]
>>> sorted(given_list, key=lambda x: (x.count("."), len(x)))
['e.x.a', 'ex.am.ple', 'm.p.l.e']
>>> sorted(given_list, key=lambda x: (x.count("."), len(x)), reverse=True)
['m.p.l.e', 'ex.am.ple', 'e.x.a']
由于您使用的是.sort
,因此您也可以在此处对列表进行排序:
>>> given_list = ["e.x.a", "m.p.l.e", "ex.am.ple"]
>>> given_list.sort(key=lambda x: (x.count("."), len(x)), reverse=True)
>>> given_list
['m.p.l.e', 'ex.am.ple', 'e.x.a']