2016-08-28 5 views
1

Ich verwende Python 3.5.2. Ich habe eine Funktion getestet, die Wörter aus einer Datei liest und sie zu einer Liste macht. Ich habe zwei Versionen gemacht: eine mit der Append-Methode und die andere mit der Verkettung. Dann machte ich eine andere Funktion, um die Zeit zu testen, die sie nehmen.Inkonsistente Ergebnisse beim Testen der Geschwindigkeiten von append und verketten

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) 

Ich habe es ein paar Mal getestet und hier ist meine Ausgabe.

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 

Die meiste Zeit ist build1 schneller als build2. Aber manchmal ist build2 schneller als build1 und manchmal haben sie die gleiche Geschwindigkeit. Warum passiert das?

+0

'mit offenem (Pfad) als f: return f.readlines()' – jonrsharpe

Antwort

3

Diese Ergebnisse sind ziemlich konsistent, wenn man bedenkt, dass Ihre CPU (wahrscheinlich) auch andere Dinge tut. Diese Tatsache macht Ihre Zeitangaben irrelevant, da Sie jeden "Testcode" ein einziges Mal ausgeführt haben.

Sie sollten timeit verwenden, um diese Tests durchzuführen. Es wird den Code viele Male ausführen und nur die wenigen schnellsten Ergebnisse ausgeben, die Ihnen einen besseren Vergleich ermöglichen.

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)) 

Dies läuft build1 und build2 1000 mal und gibt die 3 besten für jede Funktion. Diese Ergebnisse sind konsistenter als die, die Sie gesehen haben, wobei build1 fast immer schneller ist als build2. Ich habe eine Textdatei mit 1024 Zeilen für diese Tests verwendet.

[0.538437745654897, 0.5233988257550134, 0.523436147804647] 
[0.5738405088861467, 0.5879328483021968, 0.574590215558163] 

Lassen Sie uns Zeit der richtige Weg, es zu tun:

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] 
Verwandte Themen