你应该知道的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以环状形式组合排列图片并输出的方法
Mar 17 Python
python搭建微信公众平台
Feb 09 Python
Python随机读取文件实现实例
May 25 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
Python实现RGB与HSI颜色空间的互换方式
Nov 27 Python
python装饰器代替set get方法实例
Dec 19 Python
pandas中ix的使用详细讲解
Mar 09 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
django中related_name的用法说明
May 20 Python
Pytest中skip和skipif的具体使用方法
Jun 30 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
php字符串分割函数explode的实例代码
2013/02/07 PHP
PHP比你想象的好得多
2014/11/27 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
js相册效果代码(点击创建即可)
2013/04/16 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
js重写方法的简单实现
2016/07/10 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
代码详解javascript模块加载器
2018/03/04 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
pandas 读取各种格式文件的方法
2018/06/22 Python
python 反向输出字符串的方法
2018/07/16 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
详细分析Python垃圾回收机制
2020/07/01 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
临床医学大学生求职信
2013/09/28 职场文书
语文教学感言
2014/02/06 职场文书
手工社团活动方案
2014/02/17 职场文书
检查接待方案
2014/02/27 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
结婚司仪主持词
2015/06/29 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python