问题
有一个元素序列,想知道在序列中出现次数最多的元素是什么
解决方案
collections 模块中的 Counter 类转让给女士为此问题所设计的。它甚至有一个非常方便的most_common()方法可以直接告诉我们答案。
为了说明用法,假设有一个列表,列表中是一系列的单词,我们想找出哪些单词出现的最为频繁。
下面是我们的做法:
1
2
3
4
5
6
7
8
9
10
11
|
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)]
|
讨论可以给 Counter 对象提供任何可哈希的对象序列做为输入。在底层实现中,Counter 是一个字典,在元素和它们出现的次数间做了映射。例:
1
2
3
4
|
word_counter[ 'not' ]
# 1
word_counter[ 'eyes' ]
# 8
|
如果想手动增加计数,只能简单地自增即可:
1
2
3
4
5
|
morewords = [ 'why' , 'are' , 'you' , 'not' , 'looking' , 'in' , 'my' , 'eyes' ]
for word in morewords:
word_counts[word] + = 1
print (word_counts[ 'eyes' ])
# 9
|
另一种方法是使用update()方法:
1
|
word_counts.update(morewords)
|
Counter对象还可以同各种数学运算操作结合起来使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
>>> a = Counter(words)
>>> b = Counter(morewords)
>>> a
Counter({ 'eyes' : 8 , 'the' : 5 , 'look' : 4 , 'into' : 3 , 'my' : 3 , 'around' : 2 ,
"you're" : 1 , "don't" : 1 , 'under' : 1 , 'not' : 1 })
>>> b
Counter({ 'eyes' : 1 , 'looking' : 1 , 'are' : 1 , 'in' : 1 , 'not' : 1 , 'you' : 1 ,
'my' : 1 , 'why' : 1 })
>>> # Combine counts
>>> c = a + b
>>> c
Counter({ 'eyes' : 9 , 'the' : 5 , 'look' : 4 , 'my' : 4 , 'into' : 3 , 'not' : 2 ,
'around' : 2 , "you're" : 1 , "don't" : 1 , 'in' : 1 , 'why' : 1 ,
'looking' : 1 , 'are' : 1 , 'under' : 1 , 'you' : 1 })
>>> # Subtract counts
>>> d = a - b
>>> d
Counter({ 'eyes' : 7 , 'the' : 5 , 'look' : 4 , 'into' : 3 , 'my' : 2 , 'around' : 2 ,
"you're" : 1 , "don't" : 1 , 'under' : 1 })
|
以上就是Python面试题之统计哈希列表中最多元素的详细内容,更多关于Python哈希列表最多元素统计的资料请关注服务器之家其它相关文章!
原文链接:https://blog.****.net/chenyuhuaxin/article/details/100566584