使用 Counter() 查找所有具有相等计数的元素。most_common

find all the elements with equal counts with Counter().most_common

我正在使用集合中的 Counter()。most_common。我的输入(例如 counter_list)有很多相同的元素,但是如果我使用 Counter(mylist).most_common(1) 而不是获取所有结果,我只会得到第一个

mylist=['gene0.txt','gene1.txt','gene1.txt','gene2.txt','gene2.txt','gene3.txt','gene3.txt']
C = Counter(mylist).most_common(1)
我收到这个
[('gene1.txt',2)]
而不是那个
[('gene1.txt',2),('gene2.txt',2),('gene3.txt',2)]

一种解决方案是使用 itertools.takewhile:

mylist=['gene0.txt','gene1.txt','gene1.txt','gene2.txt','gene2.txt','gene3.txt','gene3.txt']

from collections import Counter
from itertools import takewhile

c = Counter(mylist)
print(list(takewhile(lambda val: val[1] == c.most_common(1)[0][1], c.most_common())))

打印:

[('gene1.txt', 2), ('gene2.txt', 2), ('gene3.txt', 2)]

或不使用 itertools.takewhile,使用列表理解:

print([item for item in c.most_common() if item[1] == c.most_common(1)[0][1]])

但这将遍历 most_common() 中的所有项目。


编辑(为清楚起见,一些调试信息):

for val in c.most_common():
    print('val[0]={} val[1]={} c.most_common(1)[0][1]={}'.format(val[0], val[1], c.most_common(1)[0][1]))

打印:

val[0]=gene1.txt val[1]=2 c.most_common(1)[0][1]=2
val[0]=gene2.txt val[1]=2 c.most_common(1)[0][1]=2
val[0]=gene3.txt val[1]=2 c.most_common(1)[0][1]=2
val[0]=gene0.txt val[1]=1 c.most_common(1)[0][1]=2