目录
问题
如果我们有一个元素序列,我们想知道序列中出现次数最多的元素是什么?
解决方案
请使用 collections
模块中的 Counter
类!
python
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)
在 Counter
类中,有函数 most_common(n)
方法,可以直接告诉我们 top(n) 个出现次数最多的元素以及其具体出现的次数:
讨论
当然,除了 top(n),Counter()
类有很多其他方法:
- 所有元素出现的次数:
python
print(word_counts.most_common())
- 获取指定元素出现的次数:
python
print(word_counts['eyes'])
- 手动增加次数:
方法一:循环写入:
python
more_words = ['why', 'are', 'you', 'not', 'looking', 'in', 'my', 'eyes']
for word in more_words:
word_counts[word] += 1
print(word_counts)
方法二:使用 update()
方法:
python
more_words = ['why', 'are', 'you', 'not', 'looking', 'in', 'my', 'eyes']
word_counts.update(more_words)
print(word_counts)
可以说,当你面对很多需要对数据制表或者计数的问题的时候,Counter
对象是得力的工具。比起用手写字典算法,更应该采用 Collection
中 Counter
类。