首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有多少种方法可以将元素添加到列表中,哪些是最快的?

有多少种方法可以将元素添加到列表中,哪些是最快的?
EN

Stack Overflow用户
提问于 2013-10-18 17:20:55
回答 2查看 335关注 0票数 3

当我参加面试时,我遇到了一个关于Python的问题:有多少种方法可以将元素添加到列表中,其中哪种方法最快?

我知道我可以使用list的方法,比如appendinsert,当然还有+。还有其他人吗?哪个是最快的,为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 17:25:10

让我们来看看吧!这是使用ipython的%%timeit魔术函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [5]: %%timeit x = []
   ...: x = x + [1]
   ...:
10000 loops, best of 3: 21.5 us per loop

In [6]: %%timeit x = []
x.append(1)
   ...:
1000000 loops, best of 3: 93.7 ns per loop

In [7]: %%timeit x = []
x.insert(0, 1)
   ...:
100000 loops, best of 3: 30 us per loop

In [8]: %%timeit x = [1,2,3]
x.insert(len(x), 1)
   ...:
1000000 loops, best of 3: 293 ns per loop

In [9]: %%timeit x = []
x.extend([1])
   ....:
1000000 loops, best of 3: 208 ns per loop

In [15]: %%timeit x = []
x += [1]
   ....:
10000000 loops, best of 3: 165 ns per loop

因此,append最快,其次是+=,其次是extend(),最后是inserting。这是因为Python不需要创建一个新列表(比如使用+)或移动所有元素(比如在开头插入)。

值得注意的是,x = x + [1]x += [1]慢了200多倍。下次性能真的很重要的时候,请记住这一点。

现在,这种行为可能因附加非常大的列表而有所不同。两者之间的差别没有那么显著:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [17]: %%timeit y = []
y = y + range(1000000)
   ....:
10 loops, best of 3: 76.8 ms per loop

In [18]: %%timeit y = []
y += range(1000000)
   ....:
10 loops, best of 3: 23.4 ms per loop

但在将添加到非常大的列表中时,情况肯定是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [24]: %%timeit y = range(1000000)
y.append(1)
   ....:
10000000 loops, best of 3: 92.7 ns per loop

In [29]: %%timeit y = range(1000000)
y.insert(len(y), 1)
   ....:
1000000 loops, best of 3: 293 ns per loop

In [30]: %%timeit y = range(1000000)
y = y + [1]
   ....:
100 loops, best of 3: 12.6 ms per loop

这是130,927次性能的差异!这就是为什么这是个面试问题。

票数 12
EN

Stack Overflow用户

发布于 2013-10-18 17:25:28

+不修改原始列表;+=修改。+=extend是一样的。追加,或插入在末尾是最快的,并有O(1)摊销时间。插入除列表中的常量末端外的任何位置都具有O(n)时间复杂度。

还请注意,方法查找对性能有非常重要的影响,因此最快的代码实际上是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
the_list = []
append = the_list.append

# later...
append(item)

如果需要,对相同的列表重复执行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19461275

复制
相关文章
从Excel中运行PPT
这里可以使用下面的PowerPointSlideshow宏从Excel中运行PowerPoint演示文稿。幻灯片放映完成后,可以按Esc键或单击屏幕上的任意位置来显示仍打开的演示文稿。在宏中已放置了注释,以解释代码在执行过程中的作用,并指出可以在何处调整PowerPoint演示文稿的名称、路径位置和幻灯片放映时间。
fanjy
2022/04/13
1.2K0
从Python中运行Excel VBA
有时候,我们可能想要从Python运行Excel VBA宏,特别是当想要运行已有的Excel宏时,这很有用——甚至可以在不打开Excel文件的情况下执行这些VBA宏。
fanjy
2022/04/13
5.7K0
【ES三周年】+数据资源目录总体架构中的ES
三年前负责的数据资源目录项目按照“一平台、组件化、微应用”原则,采用“自主研发”的方式进行构建。基于国网SG-UAP3.0平台开发,技术架构如下图所示:
数媒派
2023/02/15
6101
【ES三周年】+数据资源目录总体架构中的ES
python 从subprocess运行的子进程中实时获取输出
shell =false 意思是command 使用的不是linux shell指令,如果要用shell 指令如ls 要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序的标准错误输出重定向到了标准输出,以使我们可以直接从标准输出中同时获取标准输出和标准错误的信息。 p.poll() 返回子进程的返回值,如果为None 表示 c++子进程还未结束. p.stdout.readline() 从 c++的标准输出里获取一行.
多凡
2020/02/11
10.6K0
从gitlab下载下来的maven无法运行,老报404解决方法
1:由于在不同的地方开发同一个项目,就将项目上传到gitlab上面(可以创建私有项目,免费的),回到住的地方,项目下载下来老报错,自己摸索的,记录一下。自己记得把jdk啥的,maven依赖加一下。不然
别先生
2018/04/02
1.2K0
从gitlab下载下来的maven无法运行,老报404解决方法
OptaPlanner - 从探究示例中的hello world 初步认识规划引擎的运行步骤
上一篇我们成功以把Opotaplanner规划引擎下载回来,并把它的示例运行起来,简单解析了一下它的Cloud balance示例。这一篇我们这些示例的源代码导入到Eclipse中,看看它在后台是怎么运行的。
Kent Zhang
2019/09/10
1.6K0
OptaPlanner - 从探究示例中的hello world 初步认识规划引擎的运行步骤
WPF开发-检测软件的运行环境及运行库下载
WPF开发的基于.NET环境的应用运行时必须要有对应的环境,有时程序还需要VC环境,所以我们可以做一个检测环境的程序。
码客说
2021/12/12
1.2K0
windows11从哪里下载?下载的过程是怎样的?
许多人都渴望能够快点使用windows11系统,据了解,还有几个月的时间它就要闪亮登场了,这时候,许多人似乎都有一点按捺不住自己内心的激动之情,想要快点与它见面,虽然它马上就要问世了,但是人们并不知道windows11从哪里下载?
用户8739990
2021/07/23
1.5K0
windows11从哪里下载?下载的过程是怎样的?
Angular 修改build后的静态资源目录路径
如果你通过angular-cli创建了一个angular项目,比如名称为angular-quick-start执行ng build后,静态资源会输出到dist/angular-quick-start,angular-quick-start是项目名。
mafeifan
2019/07/11
3.7K0
Angular 修改build后的静态资源目录路径
vue-element-admin 项目从Github下载之后该怎么运行?
vue-element-admin一个基于 vue2.0 和 Eelement 的控制面板 UI 框架,这是使用vue技术栈开发的前端程序员的首选管理系统模板,模板以及非常的成熟了,并且有相关的社区和维护人员,开发时候遇到问题也不要慌。
王小婷
2020/11/13
1.7K0
vue-element-admin 项目从Github下载之后该怎么运行?
从网络下载图片,保存,并用 UIImageView 从保存中显示
//从网络下载图片 -(UIImage ) getImageFromURL:(NSString )fileURL { NSLog(@"执行图片下载函数"); UIImage * result; NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; result = [UIImage imageWithData:data]; return result; } //将所下载的图片保存到本地
用户8671053
2021/10/29
6570
GITHUB下载项目运行不起来的那些错
1: Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection Possible causes for this unexpected error include:<ul><li>Gradle's dependency c
longzeqiu
2019/08/14
1.1K0
GITHUB下载项目运行不起来的那些错
下载和运行GitHub上的代码教程总结
如果你是登录的状态,并且已经添加过SSH密钥,那么你在点击Clone orDownload的时候,就会出现:
全栈程序员站长
2022/09/05
18.8K1
下载和运行GitHub上的代码教程总结
java中main方法的运行
转载自:https://blog.csdn.net/WGYH_3767/article/details/76933676
全栈程序员站长
2022/08/31
1.2K0
分析运行中的 Python 进程
在 Java 中打印当前线程的方法栈,可以用 kill -3 命令向 JVM 发送一个 OS 信号,JVM 捕捉以后会自动 dump 出来;当然,也可以直接使用 jstack 工具完成,这些方法好几年前我在这篇性能分析的文章中介绍过。这样的需求可以说很常见,比如定位死锁,定位一个不工作的线程到底卡在哪里,或者定位为什么 CPU 居高不下等等问题。
四火
2022/07/19
8640
YARN任务运行中的Token
上一篇文章中,主要讲解了token的一些通用知识,以及hadoop中,token的实现和通用数据结构及流程。
陈猿解码
2023/02/28
8600
YARN任务运行中的Token
从Slideshare.net 下载Slide的方法:
    Slideshare.net上有很多不错的Slide都没有提供下载链接,平常倒也无所谓,都是收藏后直接在线观看的。
Enjoy233
2019/03/05
12K0
使用Python批量复制源目录下的所有Excel文件复制到目标目录中
前几天在Python白银群【由恒远】问了一个Python自动化办公处理的问题,这里拿出来给大家分享下。
Python进阶者
2023/09/02
5380
使用Python批量复制源目录下的所有Excel文件复制到目标目录中
Ubuntu下载、配置、运行Anaconda
Ubuntu下载、配置、运行Anaconda Ubuntu环境下下载、配置、运行Anaconda,环境变量配置等 文章目录 Ubuntu下载、配置、运行Anaconda 下载anaconda 在文件目录打开终端 下载 添加环境变量 启动Anaconda Anaconda常用命令 下载anaconda 在文件目录打开终端 下载 sh Anaconda3-2020.11-Linux-x86_64.sh 默认安装在/home/master/anaconda3目录下 添加环境变量 sudo
北山啦
2022/11/27
7840
Ubuntu下载、配置、运行Anaconda
点击加载更多

相似问题

CSS样式文本区域,如textfield跨浏览器

11

消除触摸设备css上的悬停效应

36

消除双击效应

44

跨浏览器/缩放响应Hover效应

21

消除边界效应

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文