使用Counter()查找计数相等的所有元素。最常见

2024-05-12 12:56:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Counter()。最常见的集合。我的输入(例如counter\u list)有许多相等的元素,但是如果我使用counter(mylist),大多数\u都是公共的(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)]


Tags: txt元素mostcountercommonlistmylistgene1
1条回答
网友
1楼 · 发布于 2024-05-12 12:56:11

一种解决方案是使用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

相关问题 更多 >