本文实例讲述了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