栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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
。由于后者返回迭代器,因此它应始终比前者更快。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号