如何返回前 n 个最常出现的字符及其各自的计数 # 例如'aaaaaabbbbcccc'
, 2
应该返回[('a', 6), ('b', 4)]
在Python中
我试过这个
def top_chars(input, n):
list1=list(input)
list3=[]
list2=[]
list4=[]
set1=set(list1)
list2=list(set1)
def count(item):
count=0
for x in input:
if x in input:
count+=item.count(x)
list3.append(count)
return count
list2.sort(key=count)
list3.sort()
list4=list(zip(list2,list3))
list4.reverse()
list4.sort(key=lambda list4: ((list4[1]),(list4[0])), reverse=True)
return list4[0:n]
pass
但它不适用于输入 ("aabc",2)
它应该给出的输出是
[('a', 2), ('b', 1)]
但我得到的输出是
[('a', 2), ('c', 1)]
Use collections.Counter()
;它有一个most_common()
的方法只是:
>>> from collections import Counter
>>> counts = Counter('aaaaaabbbbcccc')
>>> counts.most_common(2)
[('a', 6), ('c', 4)]
请注意,对于上述输入和aabc
both b
and c
具有相同的计数,并且两者都可以是有效的顶级竞争者。因为你和Counter
按计数排序然后反向键入,c
之前已排序b
.
如果您不使用反向排序,而是使用negative算作排序键,您可以排序b
before c
again:
list4.sort(key=lambda v: (-v[1], v[0))
不是那个Counter.most_common()
当您要求的物品少于柜台中的钥匙时,实际上会使用排序;它使用一个heapq基于算法而不是只获取前 N 个项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)