我有一个字符串列表,我想根据给定字符串中的点数(。)进行排序,如果这些字符串中的点数相等,则希望它们按其长度排序。无论如何都不是问题)
第一部分很容易实现
given_list.sort(key=dots,reverse=True)
点功能已实现,并且工作正常。
这是我受困的地方,因为如果点数相等,则无法根据其长度对已排序的列表进行排序。
这使我认为我应该以某种方式使用lambda自定义键参数,但是它实际上并没有像应该的那样工作,但是在嵌套列表或字典的情况下却确实如此。
我该如何完成?
您可以将自定义lambda函数传递给排序方法作为排序键。
在这种情况下,我使用lambda x: (x.count("."), len(x))
,它将创建一个由count和length组成的复合键,并进行相应的排序:
>>> 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']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句