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

时间:2015-06-16 14:45:45

标签: python list python-2.7 sorting

我有一个字符串列表,我需要通过某个字符的外观来命令它,比方说"+"。 所以,例如,如果我有这样的列表:

["blah+blah", "blah+++blah", "blah+bl+blah", "blah"]

我需要得到:

["blah", "blah+blah", "blah+bl+blah", "blah+++blah"]

我一直在研究sort()方法,但我不完全了解如何将密钥参数用于复杂的订单标准。显然sort(key=count("+"))不起作用。是否可以按{I} sort()订购列表,还是需要为其创建功能?

2 个答案:

答案 0 :(得分:10)

是的,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

答案 1 :(得分: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"]