让我们使用进行一些时间测试*
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。由于后者返回迭代器,因此它应始终比前者更快。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)