你应该知道的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的Django框架使用的一些实用建议
Apr 03 Python
打包发布Python模块的方法详解
Sep 18 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
Python模块的加载讲解
Jan 15 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
python pycharm的安装及其使用
Oct 11 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
如何在python中实现随机选择
Nov 02 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
python爬虫基础知识点整理
Jun 02 Python
python interpolate插值实例
Jul 06 Python
python 使用建议与技巧分享(四)
Aug 18 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
文件上传的实现
2006/10/09 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
js实现验证码功能
2020/07/24 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
python获取mp3文件信息的方法
2015/06/15 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
小学数学课后反思
2014/04/23 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
学校捐款活动总结
2015/05/09 职场文书
元旦主持词开场白
2015/05/29 职场文书
学术会议领导致辞
2015/07/29 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python