码迷,mamicode.com
首页 > 编程语言 > 详细

【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素

时间:2016-08-07 21:35:49      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

问题:找出一个元素序列中出现次数最多的元素是什么

解决方案:collections模块中的Counter类正是为此类问题所设计的。它的一个非常方便的most_common()方法直接告诉你答案。

# Determine the most common words in a list

words = [
   look, into, my, eyes, look, into, my, eyes,
   the, eyes, the, eyes, the, eyes, not, around, the,
   eyes, "don‘t", look, around, the, eyes, look, into,
   my, eyes, "you‘re", under
]

from collections import Counter
word_counts = Counter(words)
top_three = word_counts.most_common(3)
print(top_three)
# outputs [(‘eyes‘, 8), (‘the‘, 5), (‘look‘, 4)]

# Example of merging in more words

morewords = [why,are,you,not,looking,in,my,eyes]
word_counts.update(morewords)  #使用update()增加计数
print(word_counts.most_common(3))
>>> ================================ RESTART ================================
>>> 
[(eyes, 8), (the, 5), (look, 4)]
[(eyes, 9), (the, 5), (my, 4)]
>>> 

在底层实现中,Counter是一个字典,在元素和它们出现的次数间做了映射。

>>> word_counts
Counter({eyes: 9, the: 5, my: 4, look: 4, into: 3, around: 2, not: 2, "don‘t": 1, under: 1, are: 1, looking: 1, "you‘re": 1, you: 1, why: 1, in: 1})
>>> word_counts.most_common(3)  #top_three
[(eyes, 9), (the, 5), (my, 4)]
>>> word_counts[not]
2
>>> word_counts[eyes]
9
>>> word_counts[eyes]+1
10
>>> word_counts
Counter({eyes: 9, the: 5, my: 4, look: 4, into: 3, around: 2, not: 2, "don‘t": 1, under: 1, are: 1, looking: 1, "you‘re": 1, you: 1, why: 1, in: 1})
>>> word_counts[eyes]=word_counts[eyes]+1  #手动增加元素计数
>>> word_counts
Counter({eyes: 10, the: 5, my: 4, look: 4, into: 3, around: 2, not: 2, "don‘t": 1, under: 1, are: 1, looking: 1, "you‘re": 1, you: 1, why: 1, in: 1})
>>> 

增加元素出现次数可以通过手动进行增加,也可以借助update()方法;

另外,Counter对象另一个特性是它们可以同各种数学运算操作结合起来使用:

>>> a=Counter(words)
>>> a
Counter({eyes: 8, the: 5, look: 4, my: 3, into: 3, around: 2, under: 1, "you‘re": 1, not: 1, "don‘t": 1})
>>> b=Counter(morewords)
>>> b
Counter({not: 1, my: 1, in: 1, you: 1, looking: 1, are: 1, eyes: 1, why: 1})
>>> c=a+b
>>> c
Counter({eyes: 9, the: 5, my: 4, look: 4, into: 3, around: 2, not: 2, "don‘t": 1, under: 1, are: 1, looking: 1, "you‘re": 1, you: 1, in: 1, why: 1})
>>> # substract counts
>>> d=a-b
>>> d
Counter({eyes: 7, the: 5, look: 4, into: 3, my: 2, around: 2, under: 1, "you‘re": 1, "don‘t": 1})
>>> 

当面对任何需要对数据制表或计数的问题时,Counter对象都是你手边的得力工具。比起利用字典自己手写算法,更应采用该方式完成任务。

 

【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素

标签:

原文地址:http://www.cnblogs.com/apple2016/p/5747075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!