使用 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
我正在使用集合中的 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