2016-05-16 30 views
2

Ich möchte die Zeit von 'Pop' berechnen. Hier ist der Code.Pop von der leeren Liste

x=list(range(10000)) 
popz=timeit.Timer("x.pop(0)","from __main__ import x") 
print (popz.timeit()) 
IndexError: pop from empty list 

Wie bekomme ich die Zeit von Pop vom Anfang der Liste.

Antwort

4

Die timeit method wird standardmäßig millionenfach ausgeführt. Ihre Liste ist jedoch nur 10000 Elemente lang. Also, wenn timeit läuft, wird die erste 10000 mal glücklich Pop, aber die 10001 Iteration wird fehlschlagen. Sie können die Anzahl, wie oft explizit festgelegt:

popz.timeit(n=10000) 

aber ... das ist eine wirklich schwierige Timing Situation, da Sie zu Zeit wollen, wie lange es dauert .pop, aber die Größe der Liste ändert sich ständig. Wenn Sie nach der asymptotischen Leistung suchen, könnten Sie wahrscheinlich verifizieren, dass .pop(0) eine asymptotische Leistung von O (N) aufweist. Allerdings werden konkrete Zeiten schwer zu bekommen sein, da Sie entweder die Zeit, die es dauert, um die Liste zusammen mit der .pop, oder Ihre Liste wird ständig ändern, während Sie es timing sind. Keiner von ihnen ist ideal ... Aber ich denke, das ist das Problem mit dem Versuch, Zeit nicht idempotent Methoden ...

+0

Vielen Dank! –

0

Versuchen Sie, wie so

>>> import timeit 
>>> x=list(range(10000)) 
>>> timeit.timeit("x.pop(0)","from __main__ import x", number=len(x)) 
0.01635134604293853 
+0

Danke, es funktioniert. –

0

Vielleicht kann u versuchen, verschiedene zwischen zwei Variablen zu verwenden (datetime), die Sie vor und nach dem Popup definieren.

Ich bin mir nicht sicher, aber vielleicht ist es der Weg) Aber es ist ein Fehler, der gleich Zeit der zweiten Variablenzuweisung (nach "Pop") ist.

Nun, und ich bin mir nicht sicher über die Genauigkeit der Timedelta in diesem Fall.

+0

Danke, vielleicht hängt die Genauigkeit dieses Falls von vielen Problemen ab, wie zum Beispiel von der Arbeitsbelastung des PCs. Ich bin mir auch nicht sicher. –