List 测试附加和连接速度时结果不一致

List 测试附加和连接速度时结果不一致,list,python-3.x,List,Python 3.x,我正在使用Python 3.5.2。我正在测试一个函数,该函数将从文件中读取单词并将它们放入列表中。我制作了两个版本:一个是append方法,另一个是concatenate操作。然后,我做了另一个函数来测试它们所花费的时间 import time def build1(path): seq = [] fin = open(path) for line in fin: word = line.strip() seq.append(word)

我正在使用Python 3.5.2。我正在测试一个函数,该函数将从文件中读取单词并将它们放入列表中。我制作了两个版本:一个是append方法,另一个是concatenate操作。然后,我做了另一个函数来测试它们所花费的时间

import time

def build1(path):
    seq = []
    fin = open(path)
    for line in fin:
        word = line.strip()
        seq.append(word)
    fin.close()
    return seq

def build2(path):
    seq = []
    fin = open(path)
    for line in fin:
        word = line.strip()
        seq += [word]
    fin.close()
    return seq

def test(f, p):
    start = time.time()
    f(p)
    stop = time.time()
    print('Duration: %fs' %(stop - start))

path = 'C:/Users/neem/Desktop/words.txt'
test(build1, path)
test(build2, path)
我测试了几次,这是我的输出

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.171600s
Duration: 0.156000s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.171600s
Duration: 0.202800s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.171600s
Duration: 0.202801s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.171600s
Duration: 0.202800s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.171600s
Duration: 0.187200s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.187200s
Duration: 0.187200s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.187200s
Duration: 0.140400s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.187200s
Duration: 0.187200s

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py
Duration: 0.171600s
Duration: 0.187200s

大多数情况下,build1比build2快。但有时候build2比build1快,有时候速度也一样。为什么会发生这种情况?

考虑到您的CPU(很可能)也在做其他事情,这些结果非常一致。这一事实使您的计时变得无关紧要,因为您只运行了一次“测试代码”

您应该使用
timeit
执行这些测试。它将多次运行代码并只输出少数最快的结果,这将为您提供更好的比较

def build1():
    seq = []
    fin = open('words.txt')
    for line in fin:
        word = line.strip()
        seq.append(word)
    fin.close()
    return seq

def build2():
    seq = []
    fin = open('words.txt')
    for line in fin:
        word = line.strip()
        seq += [word]
    fin.close()
    return seq


import timeit
print(timeit.Timer(build1).repeat(number=1000))
print(timeit.Timer(build2).repeat(number=1000))
这将运行
build1
build2
1000次,并为每个函数返回3个最佳值。这些结果比您看到的结果更加一致,
build1
几乎总是比
build2
快。我在这些测试中使用了一个1024行的文本文件

[0.538437745654897, 0.5233988257550134, 0.523436147804647]
[0.5738405088861467, 0.5879328483021968, 0.574590215558163] 
让我们用正确的方法计时:

def fast():
    with open('words.txt') as f:
        return [line.strip() for line in f.readlines()]

import timeit
print(timeit.Timer(fast).repeat(number=1000))
>> [0.48617474650164105, 0.46462499504316523, 0.45692032442191644]
将open(path)作为f:返回f.readlines()