我的目标是对一个字符串列表进行排序,其中必须对单词进行排序alphabetically.Except以"s“开头的单词应该位于列表的开头(它们也应该进行排序),然后是其他单词。
下面的函数可以帮我做到这一点。
def mysort(words):
mylist1 = sorted([i for i in words if i[:1] == "s"])
mylist2 = sorted([i for i in words if i[:1] != "s"])
list = mylist1 + mylist2
return list我只是在寻找替代的方法来实现这一点,或者如果任何人可以发现上述代码的任何问题。
发布于 2013-07-12 14:29:23
在Integer答案中,我更喜欢使用元组,因为它更简洁,也更通用(适用于任意元素,而不仅仅是字符串):
sorted(key=lambda x : ((1 if x[:1] in ("S", "s") else 2), x))解释:
key参数允许根据f(item)的值对数组进行排序,而不是根据item的值对数组进行排序,其中f是一个仲裁函数。
在这种情况下,函数是匿名的(lambda),并返回一个元组,其中第一个元素是您希望元素结束的"group“(例如,如果字符串以"s”开头,则为1,否则为2)。
使用元组是可行的,因为元组比较在元素上是字典序的,因此在排序中,组码的权重将大于元素。
https://stackoverflow.com/questions/17608210
复制相似问题