你应该知道的python列表去重方法


Posted in Python onJanuary 17, 2017

前言

列表去重是写Python脚本时常遇问题,因为不管源数据来自哪里,当我们转换成列表的方式时,有可能预期的结果不是我们最终的结果,最常见的就是列表中元素有重复,这时候第一件事我们就要做去重处理。

我们先来个最简单的方式,用python内置的数据类型set来实现。

假设我们的列表数据是这样的:

level_names = [
 u'Second Level',
 u'Second Level',
 u'Second Level',
 u'First Level',
 u'First Level'
]

因为集合的元素是不能重复的,所以将列表转换成集合时,会自动去掉重复的元素,这就是基本原理,代码如下:

>>> the_list = set(level_names)
>>> print(the_list)
set([u'Second Level', u'First Level'])

这种方式缺点是再转换成列表时无法保存之前的列表顺序,如果没这个要求,这种方式是最简答的, 也许有的小伙伴觉得好简单呀,这没什么技术含量吗,没错,所以一般面试题里让你列表去重一般会这么写:

请写出列表去重的方法(不能用set)

人家写明不能用set了,所以呢,这招有时候还不能用,那当然也难不倒我们,我们还有其他方法。

我们都知道列表可以遍历,能遍历问题也就简单了,我们再定义空列表,然后遍历有数据的列表,再遍历时加一个判断,如果在空列表里没有,就加进去,如果有了就丢掉,代码如下:

the_list = []
for level in level_names:
 if level not in the_list:
  the_list.append(level)
print(the_list)

大家觉得这种方式是不是还可以,但这种方式对付一般的小列表是没问题的,但如果遇到一个超级大列表,也会力不从心,因为在the_list列表变的非常大,在判断时候会影响效率,因为列表是按索引顺序去查找的,当数据量很大时会变慢。

也许你要问了,那我遇到大的列表咋办? 有更牛掰点的方法吗?当然有,让我们继续,既然在判断时用列表会影响效率,那我们就转换一个思路,我们用集合,那你可能要问了,那集合就快了?没错,因为set使用的hash函数查找值,虽然set无序,但位置是固定的,只需一次就可以查到特定元素是否存在,网上有人做了列表和set的元素查找对比,相同的数据条件下,用list耗时16分钟,用set耗时是52秒,这一对比看出效果了吧,别的不多说了,贴代码:

the_list = []
the_set = set()
for level in level_names:
 if level not in the_set:
  the_set.add(level)
  the_list.append(level)
print(the_list)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python基于DES算法加密解密实例
Jun 03 Python
scrapy爬虫完整实例
Jan 25 Python
python定向爬取淘宝商品价格
Feb 27 Python
python实现日常记账本小程序
Mar 10 Python
python获取代理IP的实例分享
May 07 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python3利用ctypes传入一个字符串类型的列表方法
Feb 12 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
python ETL工具 pyetl
Jun 07 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 #Python
Python Socket传输文件示例
Jan 16 #Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 #Python
python一键升级所有pip package的方法
Jan 16 #Python
centos6.7安装python2.7.11的具体方法
Jan 16 #Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 #Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 #Python
You might like
Laravel中Trait的用法实例详解
2016/03/16 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
Prototype Number对象 学习
2009/07/19 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
用Python写一个自动木马程序
2019/09/17 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Python logging模块原理解析及应用
2020/08/13 Python
体育专业个人的求职信范文
2013/09/21 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
高一化学教学反思
2014/02/05 职场文书
岗位职责说明书
2014/05/07 职场文书
企业安全生产承诺书
2014/05/22 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
中秋手机店促销方案
2014/06/16 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书