最有效的方法是:对于x中的i,a = len(x)* [“”]或a = [“”)?

时间:2019-03-23 03:25:35

标签: python-3.x

我想要一个包含多个相同“虚拟”数据实例的列表,然后将它们替换(用[[index] = new data)。

我遇到了两种方法。

a= len(x)*[""]

a= ["" for i in x]

我怎么知道哪一个最好?它们的运行方式有何不同?

两者似乎都能产生完全相同的结果。

我尝试在文档,堆栈溢出和google中进行常规查找。

1 个答案:

答案 0 :(得分:0)

当然,您可以使用库timeit来检查性能速度:

from timeit import timeit

x = [0, 1, 2, 3, 4, 5]

def usingLen():
    a = len(x)*[""]

def usingListComprehension():
    a = ["" for i in x]

print(timeit("usingLen()", setup="from __main__ import usingLen"))
print(timeit("usingListComprehension()", setup="from __main__ import usingListComprehension"))

输出为:

0.373054536
0.554289093

这意味着执行一百万次len(x)*[""]花费0.37秒,而执行一百万次["" for i in x]则花费0.55秒。使用len似乎更快。

我不能确切地说你为什么,但是我认为这与理解列表的迭代有关。 len()只是计算数组的大小,然后乘以项"",而列表理解必须为数组的每个元素(不需要)进行迭代才能创建每个{{ 1}}项目,这听起来是一项艰巨的任务。

第二个迭代数组的每个元素,为每个元素创建一个""项目。虽然第一个创建次数为""项的数组长度次数,但立即检查每个项是什么。