你应该知道的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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
python自动化测试之setUp与tearDown实例
Sep 28 Python
python字符串的常用操作方法小结
May 21 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
TensorFlow数据输入的方法示例
Jun 19 Python
python读取几个G的csv文件方法
Jan 07 Python
Django框架首页和登录页分离操作示例
May 28 Python
Python实现搜索算法的实例代码
Jan 02 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 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
mysql limit查询优化分析
2008/11/12 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
jquery maxlength使用说明
2011/09/09 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
微信小程序实现多张图片上传功能
2020/11/18 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
Python3 socket同步通信简单示例
2017/06/07 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python实现图片中文字分割效果
2019/07/22 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
期末总结的个人自我评价
2013/11/02 职场文书
个人自我评价分享
2013/12/20 职场文书
创业计划书模版
2014/02/05 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
2016年寒假家长评语
2015/10/10 职场文书
2016中秋节问候语
2015/11/11 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python