你应该知道的python列表去重方法
前言
列表去重是写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中对list去重的多种方法
今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数.不过这个东西最终还是没用上. 问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: 复制代码 代码如下: ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids: if id not in news_ids: news_ids.append(id) print news_ids
-
Python做文本按行去重的实现方法
文本: 每行在promotion后面包含一些数字,如果这些数字是相同的,则认为是相同的行,对于相同的行,只保留一行. 思路: 根据字典和字符串切割. 建立一个空字典. 读入文本,并对每行切割前半部分,在读入文本的过程中循环在这个字典中查找,如果没找到,则写入该行到字典.否则,则表示该行已经被写入过字典了(即出现重复的行了),不再写入字典,这就实现了对于重复的行只保留一行的目的. 文本如下: /promotion/232 utm_source /promotion/237 LandingPage/
-
Python对list列表结构中的值进行去重的方法总结
今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数.不过这个东西最终还是没用上. 问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids: if id not in news_ids: news_ids.append(id) print news_ids 这样也可行,但是看起来不够爽. 用set 另外
-
python实现文本去重且不打乱原本顺序
代码也是在网上找的,效率挺不错的,特别适合字典文件的去重 #coding=utf-8 import sys def open_txt(): #打开TXT文本写入数组 try: xxx = file(sys.argv[1], 'r') for xxx_line in xxx.readlines(): passlist.append(xxx_line) xxx.close() except: return 0 def write_txt(): #打开TXT文本写入数组 try: yyy = file
-
Python利用正则表达式匹配并截取指定子串及去重的方法
本文实例讲述了Python利用正则表达式匹配并截取指定子串及去重的方法.分享给大家供大家参考.具体如下: import re pattern=re.compile(r'\| (\d+) \| (\d+) \|') numset=set() all=''' | 29266795 | 533 | | 29370116 | 533 | | 29467495 | 533 | | 29500404 | 533 | | 29500622 | 533 | | 29515964 | 530 | | 295160
-
Python实现快速排序算法及去重的快速排序的简单示例
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用. 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 现在通过一个实例来说明快排. 比如有一个数组: 6 2 4 5 3 第一步:选取一个基准数,不要被这个名词吓到了,你可以把它看作是一个比较大小的数,因为排序就是比较大小, 比如我选取最后一个数3为基准数,依次把数组的数和
-
python列表去重的二种方法
复制代码 代码如下: #第一种def delRepeat(liebiao): for x in liebiao: while liebiao.count(x)>1: del liebiao[liebiao.index(x)] return liebiao #第二种 无法保持原有顺序liebiao=set(liebiao)
-
python读取TXT到数组及列表去重后按原来顺序排序的方法
本文实例讲述了python读取TXT到数组及列表去重后按原来顺序排序的方法.分享给大家供大家参考.具体如下: #################################################################### # python 读取TXT到数组 列表去重,不打乱原来的顺序 # 刚学写的不好请大家见谅 #################################################################### def open_tx
-
Python统计文件中去重后uuid个数的方法
本文实例讲述了Python统计文件中去重后uuid个数的方法.分享给大家供大家参考.具体如下: 利用正则表达式按行获取日志文件中的的uuid,并且统计这些uuid的去重个数(去重利用set) import re pattern=re.compile(r'&uuid=.*&') uuidset=set() with open('request.log.2015-05-26','rt') as f: for line in f: all=pattern.findall(line) if len
-
你应该知道的python列表去重方法
前言 列表去重是写Python脚本时常遇问题,因为不管源数据来自哪里,当我们转换成列表的方式时,有可能预期的结果不是我们最终的结果,最常见的就是列表中元素有重复,这时候第一件事我们就要做去重处理. 我们先来个最简单的方式,用python内置的数据类型set来实现. 假设我们的列表数据是这样的: level_names = [ u'Second Level', u'Second Level', u'Second Level', u'First Level', u'First Level' ] 因为
-
python列表去重的5种常见方法实例
目录 前言 一.使用for循环实现列表去重 二.使用列表推导式去重 三.使用集合转换函数set()实现列表去重 四.使用新建字典方式实现列表去重 五.删除列表中存在重复的数据 附:Python 二维数组元素去重 np.unique()函数的使用 总结 前言 列表去重在python实际运用中,十分常见,也是最基础的重点知识. 以下总结了5种常见的列表去重方法 一.使用for循环实现列表去重 此方法去重后,原顺序保持不变. # for循环实现列表去重 list1 = ['a', 'b', 1, 3,
-
Python列表去重的几种方法整理
请定义函数,将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]中的重复元素除去,写出至少3种方法. 方法一:利用集合去重 list_1=[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1] def func1(list_1): return list(set(list_1)) print('去重后的列表:',func1(list_1)) 方法二:利用for循环 list_2 = [10
-
Python中字符串和列表去重方法总结
目录 字符串去重 1.直接遍历字符串的方式 2.遍历去重的另一种方式 3.将字符串转换成列表的方式(list sort) 4.根据字符串下标,判断子集 5.使用 ', '.join(L) ,将列表拼接成我们想要的字符串 列表去重 1.利用for循环的方式 2.利用set()函数 3.利用sort()排序 4.利用sort()排序后,迭代 5.巧用字典 字符串去重 1.直接遍历字符串的方式 # *_* coding : UTF-8 *_* name='王李张李陈王杨张吴周王刘赵黄吴杨
-
Python 列表去重去除空字符的例子
如下所示: # x = ['c b a',"e d f"] # y = [] # for i in x: # for ii in i: # # print(ii) # if ii == ' ': # pass # else: # y.append(ii) # print(y) # python 清除列表中的空字符 # list1 = ['122','2333','3444',' ','422',' ',' ','54',' '] # 第一种方法会导致最后一个' '没有被移除掉['122
-
Python列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有3个: reverse反转/倒序排序 sort正序排序 sorted可以获取排序后的列表 在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排
-
Python 列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序
-
说说如何遍历Python列表的方法示例
如果需要对列表中的每个元素执行相同操作,这时就需要遍历列表的所有元素. books=['半生缘','往事并不如烟','心是孤独的猎手'] for book in books: print(book) 运行结果: 冒号后面的内容就是循环体,对列表中的每个元素, 都会执行循环体中定义的内容. 用于存储列表中每个值的临时变量,建议选择可以描述单个列表元素的有意义的名称. 缩进的代码行都是循环体的一部分. 1 for 遍历后 假设我们需要在遍历 Python 列表后,执行一个打印操作: books=['
-
Python实现嵌套列表去重方法示例
发现问题 python嵌套列表大家应该都不陌生,但最近遇到了一个问题,这是工作中遇到的一个坑,首先看一下问题 raw_list = [["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"], ["百度", "CPY"]] 列表嵌套了列表,并且有一个重复列表["百度", "CPY"
随机推荐
- vue生成token保存在客户端localStorage中的方法
- 基于JavaScript实现跳转提示页面
- Golang学习笔记(五):函数
- Java实现九宫格的简单实例
- PHP三层结构(下) PHP实现AOP第1/2页
- 基于pear auth实现登录验证
- thinkPHP多表查询及分页功能实现方法示例
- python简单实现旋转图片的方法
- Java 方法签名详解及实例代码
- C++中Boost.Chrono时间库的使用方法
- js中的preventDefault与stopPropagation详解
- php自定义时间转换函数示例
- PHP实现的蚂蚁爬杆路径算法代码
- Python 3实战爬虫之爬取京东图书的图片详解
- 解决AjaxFileupload 上传时会出现连接重置的问题
- VBS教程:方法-FileExists 方法
- javascript编程起步(第三课)
- JavaScript数组深拷贝和浅拷贝的两种方法
- 基于大端法、小端法以及网络字节序的深入理解
- Java/Android 获取网络重定向文件的真实URL的示例代码