在python中创建列表的最佳和/或最快方法
在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
>>>
*注意:在所有测试中,我替换range
为xrange
。由于后者返回迭代器,因此它应该总是比前者快。
本文首发于Python黑洞网,csdn同步更新
在python中创建列表的最佳和/或最快方法相关推荐
- python如何创建一个列表_在python中创建列表的最佳和/或最快方法
在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list =[]fori inrange(50):my_list.append(0) 简单循 ...
- python中创建列表[]和list()哪个效率快?为什么快?快多少呢?
python中创建列表的两种方式: # 方法一:使用成对的方括号语法 list_a = []# 方法二:使用内置的 list() list_b = list() 1. [] 是 list() 的三-四 ...
- 如何在python中创建列表副本,在Python中切片列表而不生成副本
I have the following problem. Given a list of integers L, I need to generate all of the sublists L[k ...
- python中创建列表推导身份证号_Python列表推导和生成器表达式
一.什么是列表推导 # 例1 lst = [] for i in range(1, 11): lst.append(i) print(lst) # 例2 lst = [i for i in range ...
- 零基础Python完全自学教程15:Python中的列表
欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第14课< Python中的列表 >.本节课是一个大课,我分了这些知识点进行 ...
- 在python中创建一个具有特定大小的空列表
本文翻译自:Create an empty list in python with certain size I want to create an empty list (or whatever i ...
- gdb -iex_如何使用IEX Cloud,Matplotlib和AWS在Python中创建自动更新数据可视化
gdb -iex Python is an excellent programming language for creating data visualizations. Python是用于创建数据 ...
- 如何在 Python 中创建一个简单的神经网络
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在过去的几十年里,机器学习对世界产生了巨大的影响,而且它的普 ...
- 如何在Python中反转列表?
如何在Python中执行以下操作? array = [0, 10, 20, 40] for (i = array.length() - 1; i >= 0; i--) 我需要一个数组的元素,但是 ...
最新文章
- 将一个MapString, String写入properties文件,并且覆盖原来的内容
- JDK8新特性之Stream流
- ASP.NET Web API 特性
- linux环境下的连接器,Linux下连接器ld链接如何排序
- 基于快速GeoHash,如何实现海量商品与商圈的高效匹配?
- MySQL复习资料(八)——MySQL-事务
- C语言结构体用法很多,坑也很多
- WeStrom自定义设置修改快捷键
- php GD库文字居中,PHP GD ttftext居中对齐
- 将信息从个人计算机传递到中央,上载-常识-工控百科-工控家
- react 全选反选_js中怎么将createElement出来的复选框实现全选,全不选,反选效果?...
- 第十一节:Springboot整合log4j2日志
- ReactiveSwift源码解析(三) Signal代码的基本实现
- CompoundButton(checkbox,switch,ToggleButton)和RadioGroup OnCheckedChangeListener() 引用冲突问题
- 基于51单片机的无线测温系统
- [附源码]JAVA+ssm计算机毕业设计餐饮管理系统(程序+Lw)
- 不要去打扰别人的幸福
- excel表格怎么调整行高和列宽_同事看呆!文档怎么打印在一页上?这招超简单!...
- 06 - table表格标签+ 行合并+列合并
- 《直播系统开发 基于Nginx与Nginx-rtmp-module》
热门文章
- FreeBSD内核简介
- 怎么更改wifi频段_手机wifi延迟高怎么办
- (83)FPGA时钟抖动和时钟偏斜-面试必问(七)(第17天)
- (35)VHDL实现JK触发器
- (31)SystemVerilog语言编写D触发器
- bat 复制文件夹_一个神奇的bat批处理文件,更好的隐藏电脑里的文件或者文件夹...
- python爬取小说写入txt_Python BeautifulSoup 爬取笔趣阁所有的小说
- Python 各种运算符 布尔运算 迭代器
- python程序设计遇到的问题_Python程序设计与实践:用计算思维解决问题
- 物联网-移远M26模块OpenCPU开发第3讲(看门狗)