您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

在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 2022/1/1 18:48:00 有344人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶