python列表去重效率,你应该知道的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)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 错误: 找不到或无法加载主类

这个问题应该很常见的,笔者经常手工编译一些测试代码或者小工具,经常用到 javac和java来编译并运行一些简单的小工具。 以Hello World来测试。 HelloWorld.java public class HelloWorld{public static void main(String[]args){System.out.println(&quo…

HTML 表单 存为EXCEL文件时 中文显示乱码

在做宣传品发放系统时,需求要把数据库查询的记录生成表单并转存excel文件。 在转存的EXCEL文件中文显示乱码,表格和其他字符正常,检查后发现是创建EXCEL文件打开模式不对 之前: myfile fs.CreateTextFile(filename,true) 之后…

在Visual Studio Code中配置GO开发环境

一、GO语言安装 详情查看:GO语言下载、安装、配置 二、GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/microsoft/vscode-go 这款插件的特性包括: Colorizatio…

最受欢迎的应用服务器

这是本系列的第二篇文章,我们将发布有关Java安装的统计数据。 使用的数据集来自免费的Plumbr安装,在过去六个月中,我们总共收集了1,024个不同的环境。 本系列的第一篇文章分析了基础-运行JVM的操作系统,是32位还是62位基础架构以…

SON_EXAM考试php,通用全国少儿英语等级考试:三星笔试真题

单项选择:36. exciting the game was! I enjoyed every minute of it.A.What B. How C.What an B.How an37.You stay here if youve finished your work.A.neednt B.mustnt C. shouldnt D.cant38 Nanjing Road in Shanghai is always crowded peole.A.with B.by c.o…

JS一些碎知识点

一些js基本知识点 Doctype 浏览器渲染模式 渲染模式发展历史在多年以前(IE6诞生以前),各浏览器都处于各自比较封闭的发展中(基本没有兼容性可谈)。随着WEB的发展,兼容性问题的解决越来越显得迫切&#xff0…

CSS基础知识(display和visibility、overflow、文档流)

9、显示与隐藏 u display属性: (1)none:隐藏元素,不会再占有页面的任何空间,即不会影响布局。 (2)inline:默认值。将元素[显示]为内联元素 (与HTML元素本身无关系) (3)block&#xff1a…

浏览器滚动条样式更改

/* webkit内核浏览器 */::-webkit-scrollbar { width: 8px; }::-webkit-scrollbar-button { width: 8px; height: 5px; }::-webkit-scrollbar-track { background-color: #ddd; border-radius: 0px; }::-webkit-scrollbar-thumb { background: #999; border-radius: 0px; }::-w…

最受欢迎的Java环境

该职位将是即将发布的系列文章中的第一篇。 我们从所使用的环境开始:如果您感兴趣的是最受欢迎的JVM供应商或JVM版本,那么32bit是比64bit更流行的体系结构,还是Windows 8比Windows XP更流行的体系结构-这些都将在我们的文章中介绍。 在下一个…

爬空气质量MySQL,mysql

Flask 定了2中上下文,来实现机遇线程协程的,wsgi服务的请求(request、session)和存储(g,current_app )过程,通过栈来完成不同线程和协程的上下文切换,在与celery相结合处理异步任务时,需要保证异步任务在同…

使用宏实现透视表部分功能,将AB列数据合并统计.

功能:1.筛选B列;2.将A列中的值按照筛选后的结果进行合计. 这个特殊点是按照月日进行筛选的. Sub count_a() Dim sh As Worksheet Set sh ActiveSheet Range("C2:D" & [D65536].End(3).Row).Clear For line_b 2 To [B65536].End(3).Row If Len(Cells(line_b, &q…

HTML基础知识(常见元素、列表、链接元素、图片元素)

1、HTML有关概念 全称: Hyper Text Markup Language&#xff08;超文本标记语言&#xff09; 其文件扩展名为“.html”或“.htm” * 超文本 - 在普通的文本基础上&#xff0c;添加超链接、图片、音频或视频等 * 标记 - 标记就是HTML中的标签(元素)&#xff0c;特点:<a> …

使用Google Guava的订购API

我们一直在使用Google的Guava库做更多的事情-多么出色的库&#xff01; 我们用于它的最新内容是为我们的域对象整理比较器。 就是这样。 使用Apache Isis的JDO Objectstore &#xff0c;使您的类实现java.lang.Comparable &#xff0c;并对集合使用SortedSet是一个好习惯。 您可…

权限和ACL练习题

1、在/testdir/dir里创建的新文件自动属于g1组&#xff0c;组 g2的成员如&#xff1a;alice能对这些新文件有读写权限&#xff0c;组g3 的成员如&#xff1a;tom只能对新文件有读权限&#xff0c;其它用户&#xff08;不 属于g1,g2,g3&#xff09;不能访问这个文件夹。 前期准备…

33、求按从小到大的顺序的第N个丑数

一、题目 把只包含因子2、3和5的数称作丑数&#xff08;Ugly Number&#xff09;。例如6、8都是丑数&#xff0c;但14不是&#xff0c;因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 二、解法 1 public class Solution {2 public int …

CSS3的过渡和转换

CSS3的过渡和转换 1.过渡 什么是过渡呢&#xff1f;过渡通俗的来说就是从一个样式到另一个样式的逐渐转换改变的效果。 过渡的属性&#xff1a; 属性 描述csstransition简写属性&#xff0c;用于在一个属性中设置4个过渡属性3transition-property规定应用过渡的css属性的名称…

zookeeper选举

什么时候开始进行选举 1.服务器初始化启动的时候2.服务器运行期间连接不上leader的时候 初始化选举过程 进行leader选举至少需要两台服务器&#xff0c;我们这里举例为5台服务器&#xff08;1,2,3,4,5&#xff09;1.启动服务器1&#xff0c;第一次投票都先投给自己[1,0]。投票内…

Java,如果这是一个更好的世界

只是梦想着有一个更好的世界&#xff0c;在该世界中&#xff0c;Java平台中的一些旧错误已得到纠正&#xff0c;而某些令人敬畏的缺失功能也已实现。 不要误会我的意思。 我认为Java很棒。 但是它仍然存在一些问题&#xff0c;就像其他平台一样。 我希望没有这些特定的命令&…

参数到不进oracle,Oracle对于启动参数检查不严格

偶然发现Oracle对于pfile启动参数的检查并不严格。比如修改参数文件如下&#xff1a;[oracleyans1 ~]$ vi initprimary.oraprimary.__db_cache_size1644167168primary.__java_pool_size16777216primary.__large_pool_size16777216...*.sga_target2147483648*.standby_file_mana…

使用PLSQL-Developer导出Oracle表及数据pdf版

《使用PLSQL-Developer导出Oracle表及数据pdf版》下载地址&#xff1a; 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731340.html