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