前言

列表去重是写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列表去重方法相关推荐

  1. python 3.9特性,开发者应该知道的Python 3.9新特性

    导读:Python 3.9来了,有哪些新特性值得学,值得用? Python 2.9(5.10.2020)已经发布了一段时间,最后一个Alpha版(3.9.0a5)近期发布了测试版.开发者应该看新版有哪 ...

  2. 你需要知道的 Python 3.10 和 Python 3.9 之间的差异

    介绍: 在过去的几十年里,Python 在编程或脚本语言领域为自己创造了一个名字.python 受到高度青睐的主要原因是其极端的用户友好性.Python 还用于处理复杂的程序或编码挑战.机器学习 (M ...

  3. Python可以做什么?你所不知道的Python——生活中的奇妙用途

    大家都知道Python可以用来做数据分析.爬虫,甚至是人工智能,但却觉得那些东西比较遥远,会担心孩子学Python为时过早. Python 其实Python并不只是能做一些很专业.高端的应用,它在生活 ...

  4. Python列表操作:统计列表中的重复项出现的次数的方法,不懂也要知道的python知识

    对一个列表,比如[1,2,2,2,2,3,3,3,4,4,4,4],现在我们需要统计这个列表里的重复项,并且重复了几次也要统计出来 方法1: mylist = [1,2,2,2,2,3,3,3,4,4 ...

  5. Python第一天:你必须要知道的Python擅长领域以及各种重点学习框架(包含Python在世界上...

    [toc] 今天开始将会发布系列型的Python学习, 今天讲述的框架相对来说比较多,只能一一例举出来, 无法进行准确的 Python5大擅长领域 很多学Python的小伙伴, 转行, 或者兴趣还有就 ...

  6. 35个不会也要知道的Python小技巧

    整个集合大概是按照难易程度排序,简单常见的在前面,比较少见的在最后. 1 拆箱 >>> a, b, c = 1, 2, 3 >>> a, b, c (1, 2, 3 ...

  7. Python之每个人都应该知道的30个一行代码程序

    Python 语法简洁,能够用一行代码实现很多有趣的功能,现在整理 30 个常见的 Python 一行代码集合. ① 转置矩阵 old_list = [[1, 2, 3], [3, 4, 6], [5 ...

  8. python神奇功能_16个你毫不知道的Python神奇技能

    显示有限的接口到外部 当发布python第三方package时, 并不但愿代码中全部的函数或者class能够被外部import, 在__init__.py中添加__all__属性,python 该li ...

  9. Python第一天:你必须要知道的Python擅长领域以及各种重点学习框架(包含Python在世界上的应用)

    文章目录 Python5大擅长领域 WEB开发 网络编程 科学运算 GUI图形开发 运维自动化 Python在世界上的知名应用 国外 谷歌 CIA NASA YouTube Dropbox Insta ...

最新文章

  1. golang 反射 reflect 设置 struct 字段
  2. Thunk 函数的含义和用法
  3. 图像间距pitch是什么?(linesize、stride)(指图像中的一行图像数据所占的存储空间的长度)
  4. android 获取对象,在Android中获取LayoutInflater对象的方法
  5. python 关闭 定时开启_Python爬虫邮箱定时自动发送
  6. 三星智能电视将用户语音隐私泄露给第三方?
  7. Atitit uke plnsy安全隐私保护法案 目录 第一章 一般规定 2 第1节 主题与目标 2 第二章 常见安全原则 3 第1节 隔离 保密 shell 3 第2节 隐藏 保密 不出头 3
  8. poi html转换成word文档,poi将html转换为word文档
  9. android sdk mac 环境变量,Mac 下的SDK环境变量配置
  10. 直击六大会场 | 洞察100+创新实践,2018TOP100summit圆满落幕!
  11. 神经网络模型的工作原理,人脑神经网络模型
  12. 装机记录Win10专业版可以做的事……
  13. pygame-KidsCanCode系列jumpy-part7-游戏启动/结束画面
  14. php 8进制,PHP中的进制转换
  15. Tim Sweeney 采访实录:Metaverse的商业规则该如何打造?
  16. bootstrap-table自定义列排序
  17. 【转贴】linux操作系统下c语言编程入门
  18. Google Earth Engine(GEE)APP——一个监测影像各波段的DN值的app
  19. 廉江计算机等级考试学校最大,湛江一中、二中、北大附属实验学校和廉江实验学校成绩比较...
  20. 灵性·挖掘:自我迭代之路

热门文章

  1. Mongo数据库搭建
  2. conda 安装mysql_centos7安装mysql
  3. mysql 用户授权_mysql添加、删除用户和授权用户
  4. 数据分析工具篇——HQL原理及函数逻辑
  5. java集成_Java继承
  6. java hashmap替换key,HashMap 用可变对象作为 key 踩坑
  7. SDHelper module加密系统解密
  8. Iterator作用
  9. min-width:100%和max-width:100%的区别
  10. ZOJ1081 Points Within