本文实例讲述了Python找出序列中出现次数最多的元素。分享给大家供大家参考,具体如下:
问题:找出一个元素序列中出现次数最多的元素是什么
解决方案:collections模块中的Counter类正是为此类问题所设计的。它的一个非常方便的most_common()
方法直接告诉你答案。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 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 )) |
1
2
3
4
5
|
>>> = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = RESTART = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = >>> [( 'eyes' , 8 ), ( 'the' , 5 ), ( 'look' , 4 )] [( 'eyes' , 9 ), ( 'the' , 5 ), ( 'my' , 4 )] >>> |
在底层实现中,Counter是一个字典,在元素和它们出现的次数间做了映射。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> 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对象另一个特性是它们可以同各种数学运算操作结合起来使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> 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》)
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://www.cnblogs.com/apple2016/p/5747075.html