需求:
如何从一个序列中快速获取出现次数最多的元素。

方法:
利用collections.Counter类可以解决这个问题,特别是他的most_common()方法更是处理此问题的最快途径。比如,现在有一个单词的序列,你想快速获取哪个单词出现频率最高,就可以这么做:

In [22]: words = ['look', 'into', 'my', 'eyes', 'look', 'into',
...: 'my', 'eyes', 'the', 'eye', 'the', 'eyes', 'not',
...: 'around', 'the', 'eyes', "don't", 'look', 'around',
...: 'the', 'eyes', 'look', 'into', 'my', 'eyes', "you're",
...: 'under'
...: ]

In [23]: from collections import Counter
In [24]: word_counts = Counter(words)
In [25]: print(word_counts.most_common(3))
[('eyes', 6), ('look', 4), ('the', 4)]

事实上,Counter对象是一个元素和其数目对应关系所构成的字典, 例如:

In [26]: word_counts['not']
Out[26]: 1
In [27]: word_counts['into']
Out[27]: 3

扩展:
如果你想手动扩展单词数目,可以使用下面的方式:

In [28]: more_words = ['why', 'are', 'you', 'not', 'looking', 'in',
...: 'my', 'eyes']
In [29]: for word in more_words:
...: word_counts[word] += 1
...: # word_counts.update(more_words)
In [30]: word_counts['eyes']
Out[30]: 7

Counter类还有一些类似于数学运算的方法,使用起来也是相当方便:

In [31]: a = Counter(words)

In [32]: b = Counter(more_words)

In [33]: a
Out[33]:
Counter({'around': 2,
"don't": 1,
'eye': 1,
'eyes': 6,
'into': 3,
'look': 4,
'my': 3,
'not': 1,
'the': 4,
'under': 1,
"you're": 1})

In [34]: b
Out[34]:
Counter({'are': 1,
'eyes': 1,
'in': 1,
'looking': 1,
'my': 1,
'not': 1,
'why': 1,
'you': 1})

In [35]: c = a + b

In [36]: c
Out[36]:
Counter({'are': 1,
'around': 2,
"don't": 1,
'eye': 1,
'eyes': 7,
'in': 1,
'into': 3,
'look': 4,
'looking': 1,
'my': 4,
'not': 2,
'the': 4,
'under': 1,
'why': 1,
'you': 1,
"you're": 1})

In [37]: d = b - a

In [38]: d
Out[38]: Counter({'are': 1, 'in': 1, 'looking': 1, 'why': 1, 'you': 1})

Python实用黑科技——找出序列里面出现次数最多的元素的更多相关文章

  1. 【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素

    问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的.它的一个非常方便的most_common()方法直接告诉你答案. # ...

  2. 【python cookbook】找出序列中出现次数最多的元素

    问题 <Python Cookbook>中有这么一个问题,给定一个序列,找出该序列出现次数最多的元素.例如: words = [ 'look', 'into', 'my', 'eyes', ...

  3. Python实用黑科技——找出最大/最小的n个元素

    需求: 快速的获取一个列表中最大/最小的n个元素. 方法: 最简便的方法是使用heapq模组的两个方法nlargest()和nsmallest(),例如: In [1]: import heapqIn ...

  4. python之Counter类:计算序列中出现次数最多的元素

    Counter类:计算序列中出现次数最多的元素 from collections import Counter c = Counter('abcdefaddffccef') print('完整的Cou ...

  5. Java实现找出数组中重复次数最多的元素以及个数

    /**数组中元素重复最多的数 * @param array * @author shaobn * @param array */ public static void getMethod_4(int[ ...

  6. [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  7. 剑指Offer:找出数组中出现次数超过一半的元素

    题目:找出数组中出现次数超过一半的元素 解法:每次删除数组中两个不同的元素,删除后,要查找的那个元素的个数仍然超过删除后的元素总数的一半 #include <stdio.h> int ha ...

  8. Python中用max()筛选出列表中出现次数最多的元素

    1 List = [1,2,3,4,2,3,2] # 随意创建一个只有数字的列表 2 maxTimes = max(List,key=List.count) # maxTimes指列表中出现次数最多的 ...

  9. python 找出字符串中出现次数最多的字母

    # 请大家找出s=”aabbccddxxxxffff”中 出现次数最多的字母 # 第一种方法,字典方式: s="aabbccddxxxxffff" count ={} for i ...

随机推荐

  1. Http option 请求是怎么回事

    在前后台分离的项目中,经常会遇到浏览器想服务端发送一个post/patch请求,实际上产生了两个请求,一个是Option,另一个才是真实的Post/Patch请求, 而get请求则不会产生Option ...

  2. 剑指offer-数组中只出现一次的数字-数组-python

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.   # -*- coding:utf-8 -*- class Solution: # 返回[a, ...

  3. C#中static修饰符的作用

    static在C#中表示的是静态的,比如一个静态的字段是归类型所有,而非归对象所有,也就是说,在调用这个字段时,只能用类型去调,而不能用对象. 实例字段时随着对象创建而创建,对象销毁而销毁,而静态字段 ...

  4. 小程序存emoji表情 不改变数据库

    1.小程序:提交前先编码 encodeURIComponent(data) 2.服务端解码(PHP) urldecode(data) 3.如果有空格字符串的,保存之前先对空格进行处理,不然空格在页面会 ...

  5. python 练习合集一

    一.运算符与流程控制 1.输入两个整数,打印较大的那个值2.输入三个整数,按照从小到大的顺序打印3.输入一个三位数,打印其个位.十位.百位上的数4.输入一个年份,判断是否为闰年,是打印一句话,不是打印 ...

  6. node + express搭建api项目

    express框架 描述 express是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能. 安装 // 1.使用npm淘宝镜像--cn ...

  7. 写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z

    题目: 写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z.要求用线程间的通信. /** * 写两个线程,第一个线程打印1-52,第二个线程打印 ...

  8. 微信公众号开发者中心配置 Token验证失败 终极解决方案

    请您检查这几项: 1. 在您的URL(服务器地址)页面里,直接Get获取echostr参数打印到页面上. 在火狐浏览器里Firebug里面看到echostr前面多了几个乱码. 把您开发者设置的URL页 ...

  9. mysql 5.5.36 通用二进制安装部署

    1.创建mysql用户 # useradd -r mysql 2.解压二进制包到指定目录下 # tar xf mysql-5.5.36-linux2.6-x86_64.tar.gz -C /usr/l ...

  10. PropertyPlaceholderConfigurer implements BeanFactoryPostProcessor

    BeanFactoryPostProcessor的应用 最常用的一个应用就是org.springframework.beans.factory.config.PropertyPlaceholderCo ...