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

简单循环append

my_list = []
for i in range(50):my_list.append(0)

简单循环+=

my_list = []
for i in range(50):my_list += [0]

列表理解:

my_list = [0 for i in range(50)]

列表和整数乘法:

my_list = [0] * 50

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

解决方案


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

>>> from timeit import timeit
>>>
>>> # 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 _ in xrange(3)]
>>> lst
[[], [], []]
>>> # The ids of the items in `lst` are different
>>> id(lst[0])
28796688
>>> id(lst[1])
28796648
>>> id(lst[2])
28736168
>>>

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

本文首发于Python黑洞网,csdn同步更新

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

  1. python如何创建一个列表_在python中创建列表的最佳和/或最快方法

    在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list =[]fori inrange(50):my_list.append(0) 简单循 ...

  2. python中创建列表[]和list()哪个效率快?为什么快?快多少呢?

    python中创建列表的两种方式: # 方法一:使用成对的方括号语法 list_a = []# 方法二:使用内置的 list() list_b = list() 1. [] 是 list() 的三-四 ...

  3. 如何在python中创建列表副本,在Python中切片列表而不生成副本

    I have the following problem. Given a list of integers L, I need to generate all of the sublists L[k ...

  4. python中创建列表推导身份证号_Python列表推导和生成器表达式

    一.什么是列表推导 # 例1 lst = [] for i in range(1, 11): lst.append(i) print(lst) # 例2 lst = [i for i in range ...

  5. 零基础Python完全自学教程15:Python中的列表

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第14课< Python中的列表 >.本节课是一个大课,我分了这些知识点进行 ...

  6. 在python中创建一个具有特定大小的空列表

    本文翻译自:Create an empty list in python with certain size I want to create an empty list (or whatever i ...

  7. gdb -iex_如何使用IEX Cloud,Matplotlib和AWS在Python中创建自动更新数据可视化

    gdb -iex Python is an excellent programming language for creating data visualizations. Python是用于创建数据 ...

  8. 如何在 Python 中创建一个简单的神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在过去的几十年里,机器学习对世界产生了巨大的影响,而且它的普 ...

  9. 如何在Python中反转列表?

    如何在Python中执行以下操作? array = [0, 10, 20, 40] for (i = array.length() - 1; i >= 0; i--) 我需要一个数组的元素,但是 ...

最新文章

  1. 将一个MapString, String写入properties文件,并且覆盖原来的内容
  2. JDK8新特性之Stream流
  3. ASP.NET Web API 特性
  4. linux环境下的连接器,Linux下连接器ld链接如何排序
  5. 基于快速GeoHash,如何实现海量商品与商圈的高效匹配?
  6. MySQL复习资料(八)——MySQL-事务
  7. C语言结构体用法很多,坑也很多
  8. WeStrom自定义设置修改快捷键
  9. php GD库文字居中,PHP GD ttftext居中对齐
  10. 将信息从个人计算机传递到中央,上载-常识-工控百科-工控家
  11. react 全选反选_js中怎么将createElement出来的复选框实现全选,全不选,反选效果?...
  12. 第十一节:Springboot整合log4j2日志
  13. ReactiveSwift源码解析(三) Signal代码的基本实现
  14. CompoundButton(checkbox,switch,ToggleButton)和RadioGroup OnCheckedChangeListener() 引用冲突问题
  15. 基于51单片机的无线测温系统
  16. [附源码]JAVA+ssm计算机毕业设计餐饮管理系统(程序+Lw)
  17. 不要去打扰别人的幸福
  18. excel表格怎么调整行高和列宽_同事看呆!文档怎么打印在一页上?这招超简单!...
  19. 06 - table表格标签+ 行合并+列合并
  20. 《直播系统开发 基于Nginx与Nginx-rtmp-module》

热门文章

  1. FreeBSD内核简介
  2. 怎么更改wifi频段_手机wifi延迟高怎么办
  3. (83)FPGA时钟抖动和时钟偏斜-面试必问(七)(第17天)
  4. (35)VHDL实现JK触发器
  5. (31)SystemVerilog语言编写D触发器
  6. bat 复制文件夹_一个神奇的bat批处理文件,更好的隐藏电脑里的文件或者文件夹...
  7. python爬取小说写入txt_Python BeautifulSoup 爬取笔趣阁所有的小说
  8. Python 各种运算符 布尔运算 迭代器
  9. python程序设计遇到的问题_Python程序设计与实践:用计算思维解决问题
  10. 物联网-移远M26模块OpenCPU开发第3讲(看门狗)