【问题标题】:find all the elements with equal counts with Counter().most_common使用 Counter().most_common 找到所有具有相同计数的元素
【发布时间】:2019-08-21 15:59:49
【问题描述】:

我正在使用来自集合的 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)]

【问题讨论】:

  • 改用C = Counter(mylist).most_common()
  • 我做到了。它打印内部具有最小值的整个列表(在这种情况下是 blah0,1)我只想要具有最高值的元素(2)
  • 您能否更新您的问题以包含mylist
  • 当然……完成了!

标签: python collections counter


【解决方案1】:

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

【讨论】:

  • 它有效...我不知道如何(我有一些研究要做)但它有效...
  • 您能告诉我一种方法来查找有关您编写的 lambda 构建的信息吗?
  • @MikeEugeniou lambda val: val[1] == c.most_common(1)[0][1]val 是来自 most_common() 调用的项目 -> 元组 (value, count)。所以val[1] 是计数,c.most_common(1)[0][1] 是我们的Counter 中最常见的计数。我们只取具有此计数值的值。
  • val[1] 和 val[0] 的区别我可以看到与 c.most_common(1)[0][1] 的相关性。 (当我写 val[0] 和 c.most_common(1)[0][0] 时,它只给出第一次出现)但它是如何工作的?
  • @MikeEugeniou val[1] 是计数,val[0] 是计数的值。我建议创建一个循环 for val in c.most_common(): 并打印 val 以查看它的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
相关资源
最近更新 更多