我想要一个包含多个相同“虚拟”数据实例的列表,然后将它们替换(用[[index] = new data)。
我遇到了两种方法。
a= len(x)*[""]
和
a= ["" for i in x]
我怎么知道哪一个最好?它们的运行方式有何不同?
两者似乎都能产生完全相同的结果。
我尝试在文档,堆栈溢出和google中进行常规查找。
答案 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}}项目,这听起来是一项艰巨的任务。
第二个迭代数组的每个元素,为每个元素创建一个""
项目。虽然第一个创建次数为""
项的数组长度次数,但立即检查每个项是什么。