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

在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黑洞网,博客园同步更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值