我有一个字符串列表,我需要通过某个字符的外观来命令它,比方说"+"
。
所以,例如,如果我有这样的列表:
["blah+blah", "blah+++blah", "blah+bl+blah", "blah"]
我需要得到:
["blah", "blah+blah", "blah+bl+blah", "blah+++blah"]
我一直在研究sort()
方法,但我不完全了解如何将密钥参数用于复杂的订单标准。显然sort(key=count("+"))
不起作用。是否可以按{I} sort()
订购列表,还是需要为其创建功能?
答案 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"]