如何返回前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
Run Code Online (Sandbox Code Playgroud)
但它不适用于输入("aabc",2)它应该给出的输出是
[('a', 2), ('b', 1)]
Run Code Online (Sandbox Code Playgroud)
但我得到的输出是
[('a', 2), ('c', 1)]
Run Code Online (Sandbox Code Playgroud)
使用collections.Counter(); 它有一个most_common()方法可以做到这一点:
>>> from collections import Counter
>>> counts = Counter('aaaaaabbbbcccc')
>>> counts.most_common(2)
[('a', 6), ('c', 4)]
Run Code Online (Sandbox Code Playgroud)
请注意,上述两个输入和aabc两个b与c具有相同的数,都可以有效的顶级竞争者.因为你和Counter按计数排序然后键入反向,c之前排序b.
如果不是反向排序,您使用的是负数为排序键,你的排序b前c再次:
list4.sort(key=lambda v: (-v[1], v[0))
Run Code Online (Sandbox Code Playgroud)
Counter.most_common()当你要求的物品少于柜台上的钥匙时,实际上并没有使用分拣; 它使用heapq基于算法的方法来获得前N个项目.
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |