如何按特定字符的数量对字符串列表进行排序?

6
我有一个字符串列表,我需要按照某个特定字符的出现顺序对其进行排序,比如说"+"。 因此,例如,如果我有这样一个列表:
["blah+blah", "blah+++blah", "blah+bl+blah", "blah"]

我需要得到:
["blah", "blah+blah", "blah+bl+blah", "blah+++blah"]

我一直在学习 sort() 方法,但我不完全明白如何使用关键参数进行复杂的排序条件。显然,sort(key=count("+")) 不起作用。我是否可以使用 sort() 按照我想要的方式对列表进行排序,还是需要编写一个函数来实现?
2个回答

14

是的,list.sort 可以实现,不过需要指定 key 参数:

In [4]: l.sort(key=lambda x: x.count('+'))

In [5]: l
Out[5]: ['blah', 'blah+blah', 'blah+bl+blah', 'blah+++blah']

在这段代码中,key函数接受一个参数并使用str.count来计算其中出现'+'的次数。
至于list.sort(key=count('+')),如果你定义了如下的count函数(使用operator.methodcaller),它是可以正常工作的。
count = lambda x: methodcaller('count', x) # from operator import methodcaller

2
请记住,这是就地排序,不同于 sorted - Zizouz212

0

你可以使用 -

s = ["blah+blah","blah+++blah","blah+bl+blah","blah"]
print(sorted(s,key=lambda t: t.count('+')))
>>["blah","blah+blah","blah+bl+blah","blah+++blah"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接