初学者经常会遇到如何移除 list 中重复元素的问题。 这个问题在其他语言中可能需要 for 循环什么的,而在 python 中不用这样,非常简单,下面来通过这篇文章主要介绍了关于 python 列表去重方法以及拓展, 需要的朋友可以参考借鉴,一起来看看吧。
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
前言
列表去重是写 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)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
来源: