most_common()函数源码解读

Counter类中的most_common()函数
parameter(参数):
        传进去一个可选参数n(代表获取数量最多的前n个元素,如果不传参数,代表返回所有结果)
return(返回):
        返回一个列表(里面的元素是一个元组,元组第0位是被计数的具体元素,元组的第1位是出现的次数,如:[('a',1),[('b'),2],[('c',3)]])当多个元素计数值相同时,按照字母序排列。
下边是 most_common 的源码:

def most_common(self, n=None):
    if n is None:
        return sorted(self.iteritems(), key=_itemgetter(1), reverse=True)
    return _heapq.nlargest(n, self.iteritems(), key=_itemgetter(1))

       先来看n是None的情况,因为Counter类继承自dict,所以 self.iteritems 得到的是键值对元组的列表,用 sorted对这个列表进行排序,因为是要按照元组的第1位的数字从大到小的顺序来排序,所以key应该是元组的第1位。代码中用 _itemgetter(1)来取出元组的第1位,_itemgetteroperator 模块里的 itemgetter

如果 n 不为 None ,调用了 heapq(最上边导入时将heapq as 重命名成了 _heapq) 模块中的 nlargest 函数,这个函数的实现有些略微复杂,等以后有时间再去看,直接看下函数的介绍:

Find the n largest elements in a dataset.
Equivalent to:  sorted(iterable, key=key, reverse=True)[:n]

这个函数的调用结果和用 sorted 排序后再取出前n个结果等价。

也就是 sorted(self.iteritems(), key=_itemgetter(1), reverse=True)[:n]

你可能感兴趣的:(python函数)