List 测试附加和连接速度时结果不一致
我正在使用Python 3.5.2。我正在测试一个函数,该函数将从文件中读取单词并将它们放入列表中。我制作了两个版本:一个是append方法,另一个是concatenate操作。然后,我做了另一个函数来测试它们所花费的时间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)
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()