多行循环会花费更多时间

时间:2019-04-13 03:54:39

标签: python python-3.x for-loop

在单行中使用for循环:

%%time
y = [x*2 if x%2 != 0 else x+2 for x in range(10000000)]


CPU times: user 1.27 s, sys: 150 ms, total: 1.42 s
Wall time: 1.42 s

在多行中使用for循环:

%%time
y =[]
for x in range(10000000):
    if x%2 != 0:
        y.append(x*2)
    else:
        y.append(x+2)
CPU times: user 2.45 s, sys: 198 ms, total: 2.65 s
Wall time: 2.65 s

为什么第二个for循环需要更多时间?两者都在做同一件事。

1 个答案:

答案 0 :(得分:1)

这是因为追加到列表将导致该列表多次扩展空间。立即保留此所需空间将节省扩展成本。

尝试一下:

y = [0] * 10000000
for x in range(10000000):
     if x % 2 != 0:
         y[x] = x*2
     else:
         y[x] = x+2