在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表:

简单循环append:

my_list =[]fori inrange(50):my_list.append(0)

简单循环+=:

my_list =[]fori inrange(50):my_list +=[0]

列表理解:

my_list =[0fori inrange(50)]

列表和整数乘法:

my_list =[0]*50

在这些例子中,我认为只有列表只有50个元素会有任何性能差异,但如果我需要一个包含一百万个元素的列表呢?使用xrange会有什么改进吗?哪个是在python中创建和初始化列表的首选/最快方法?

解决方案

让我们运行一些时间测试*timeit.timeit:

>>>fromtimeit importtimeit

>>>>>># Test 1>>>test ="""

... my_list = []

... for i in xrange(50):

... my_list.append(0)

... """>>>timeit(test)22.384258893239178>>>>>># Test 2>>>test ="""

... my_list = []

... for i in xrange(50):

... my_list += [0]

... """>>>timeit(test)34.494779364416445>>>>>># Test 3>>>test ="my_list = [0 for i in xrange(50)]">>>timeit(test)9.490926919482774>>>>>># Test 4>>>test ="my_list = [0] * 50">>>timeit(test)1.5340533503559755>>>

如您所见,最后一种方法是迄今为止最快的方法。

但是,它应该只用一成不变的物品(如整数)使用。这是因为它将创建一个列表,其中包含对同一项的引用。

以下是演示:

>>>lst =[[]]*3>>>lst

[[],[],[]]>>># The ids of the items in `lst` are the same>>>id(lst[0])28734408>>>id(lst[1])28734408>>>id(lst[2])28734408>>>

这种行为通常是不受欢迎的,并且可能导致代码中的错误。

如果你有可变项(例如列表),那么你应该使用仍然非常快的列表理解:

>>>lst =[[]for_ inxrange(3)]>>>lst

[[],[],[]]>>># The ids of the items in `lst` are different>>>id(lst[0])28796688>>>id(lst[1])28796648>>>id(lst[2])28736168>>>

*注意:在所有测试中,我替换range为xrange。由于后者返回迭代器,因此它应该总是比前者快。

本文首发于Python黑洞网,博客园同步更新

python如何创建一个列表_在python中创建列表的最佳和/或最快方法相关推荐

  1. python如何创建问答窗口_在tkin中创建一个新的单独窗口

    我想创建一个新的单独窗口,比如在记事本中打开一个新页面.在 我写的是:import tinter from tkinter import Tk, Frame, Menu class Example(F ...

  2. python实现excel数据透视_在pywin32中创建Excel数据透视缓存

    我试图用python创建一个pivot表,但无法让它在我自己的数据上工作.我已经确定了一个问题单元是示例文件中的最后一个单元.在excel中直接创建透视表时,同样的数据也可以正常工作.在 代码如下:i ...

  3. java 如何创建一个数组_如何用Java创建一个数组?

    在Java中,可以使用new关键字像对象一样创建数组.使用new关键字在Java中创建数组的语法-type[] reference = new type[10]; 哪里,type是数组元素的数据类型. ...

  4. 在linux桌面上创建一个文本,如何在Ubuntu中创建文档

    有几种方法可以在Ubuntu中使用GUI和命令行创建文档.所有这些方法都非常简单易用.您可能早些时候已在Ubuntu中将这些方法用于其他目的.但是,在本文中,我们将向您展示在Ubuntu中创建文档的8 ...

  5. vs2019中如何创建qt项目_在VS2015中创建Qt项目【VS+Qt项目开发系列】(二)

    在VS2015中创建Qt项目[VS+Qt项目开发系列](二) 发布时间:2018-04-20 22:44, 浏览次数:1269 , 标签: VS Qt 在上一篇[VS+Qt项目开发](一)在VS201 ...

  6. unity中创建游戏场景_在Unity中创建Beat Em Up游戏

    unity中创建游戏场景 Learn how to use Unity to create a 3D Beat Em Up game in this full tutorial from Awesom ...

  7. python自定义一个函数求序列中的偶数_使用range函数创建一个从2到10的偶数列表 alist...

    [多选题]在Python中添加注释可以使用哪些符号? [简答题]给定一个包含若干个整数的列表alist,要求返回输出列表blist,blist中的元素为 与alist对应位置上的元素之外其余各元素的乘 ...

  8. python词云改颜色_使用Python创建一个与图像颜色匹配的词云

    原标题:使用Python创建一个与图像颜色匹配的词云 来自:https://www.linuxmi.com/ 我用Python造了一个词云.不过这次创建的是与图像颜色匹配的词云. 使用Python w ...

  9. python计算长方体体积编程_计算体积 编程创建一个Box类(长方体) 联合开发网 - pudn.com...

    计算体积 所属分类:Windows编程 开发工具:Java 文件大小:4KB 下载次数:0 上传日期:2019-12-08 16:53:01 上 传 者:洛水天依- 说明:  编程创建一个Box类(长 ...

  10. 在阿里云容器服务上创建一个使用Redis的Python应用

    使用容器服务可以方便快速的创建应用,下面的例子展示如何在容器服务上创建一个使用Redis的Python应用,只需要简单的几步. 第一步:准备代码 由于只是一个例子,所以我不可能使用太复杂的应用代码. ...

最新文章

  1. 极速理解设计模式系列:7.桥接模式(Bridge Pattern)
  2. SublimeLinter插件对PHP语法检测不起作用的解决办法
  3. uoj 118 赴京赶考
  4. Netlog 的数据库及 LAMP 架构
  5. .NET Core with 微服务 - Elastic APM
  6. Max Sum Plus Plus HDU - 1024
  7. canvas入门实战--邀请卡生成与下载
  8. 【CodeForces - 124C】Prime Permutation(数学,思维,小结论)
  9. mysql 5.7自定义安装路径_Mysql5.7.18版本(二进制包安装)自定义安装路径教程详解...
  10. Delta机器人鲁棒控制仿真
  11. There appears to be trouble with your network connection
  12. 网吧服务器哪个好稳定,网吧服务器不应盲目追高新:够用稳定就好
  13. 计算机教室报损登记簿,瑞安市第四中学
  14. WSTMart多商户商城跟随thinkphp框架升级到5.0.3
  15. 三国时期蜀国的巅峰实力
  16. [谨记]女人面前莫谈年龄
  17. Spring框架基础入门
  18. 二年级计算机课,小学二年级信息技术课程教案三篇
  19. LockSupport 的 park 和 unpark 以及线程中断对 park 的影响
  20. 【NLP练级之路 第三篇】Beyond Prompting: Making Pre-trained Language Models Better Zero-shot Learners by Clust

热门文章

  1. Android Studio 选项菜单和动画结合_Android 应用与iOS 应用之间的设计差异对比!
  2. 别再龟速炼丹了!聊聊怎样科学提升训练效率
  3. 为什么每次有人大声通电话时,我就很烦躁...
  4. 别再搞纯文本了!多模文档理解更被时代需要!
  5. ACL20 | 让笨重的BERT问答匹配模型变快!
  6. 论文浅尝 - ACL2021 | 探讨跨句事件联合抽取问题
  7. 论文浅尝 | 可建模语义分层的知识图谱补全方法
  8. 复杂语境下的实体关系抽取
  9. 搜狗地图2016-Android-社招笔试题(包含Java基础部分)
  10. interceptor 拦截器的使用 (session验证)