2013-08-11 14 views
23

Ich habe dieses Programm, das die Zeit für die Beantwortung einer bestimmten Frage berechnet, und verlässt die While-Schleife, wenn die Antwort falsch ist, aber ich möchte die letzte Berechnung löschen, so kann ich min() anrufen und es ist nicht die falsche Zeit Tut mir leid, wenn das verwirrend ist.Python | Wie lösche ich den letzten Eintrag in der Liste?

from time import time 

q = input('What do you want to type? ') 
a = ' ' 
record = [] 
while a != '': 
    start = time() 
    a = input('Type: ') 
    end = time() 
    v = end-start 
    record.append(v) 
    if a == q: 
     print('Time taken to type name: {:.2f}'.format(v)) 
    else: 
     break 
for i in record: 
    print('{:.2f} seconds.'.format(i)) 

Antwort

3

Sie benötigen:

record = record[:-1] 

vor dem for Schleife.

Dies wird record auf die aktuelle record Liste aber ohne das letzte Element setzen. Sie können, abhängig von Ihren Bedürfnissen, sicherstellen, dass die Liste nicht leer ist, bevor Sie dies tun.

+0

Ich sehe, danke! – Samir

+2

Könnten Sie auch 'record.pop()' verwenden? (NB: Ich bin sehr neu in Python) – CodeBeard

+1

Ja, Sie könnten auch record.pop() verwenden. Siehe http://docs.python.org/3.3/tutorial/datastructures.html – Bastiano9

2

Wenn Sie viel mit Timing zu tun, kann ich diesen kleinen (20 Linie) Kontext-Manager empfehlen:

Sie Code könnte wie folgt aussehen dies dann:

#!/usr/bin/env python 
# coding: utf-8 

from timer import Timer 

if __name__ == '__main__': 
    a, record = None, [] 
    while not a == '': 
     with Timer() as t: # everything in the block will be timed 
      a = input('Type: ') 
     record.append(t.elapsed_s) 
    # drop the last item (makes a copy of the list): 
    record = record[:-1] 
    # or just delete it: 
    # del record[-1] 

Gerade als Referenz, hier ist der Inhalt des Managers Timer Kontext in voller Länge:

from timeit import default_timer 

class Timer(object): 
    """ A timer as a context manager. """ 

    def __init__(self): 
     self.timer = default_timer 
     # measures wall clock time, not CPU time! 
     # On Unix systems, it corresponds to time.time 
     # On Windows systems, it corresponds to time.clock 

    def __enter__(self): 
     self.start = self.timer() # measure start time 
     return self 

    def __exit__(self, exc_type, exc_value, exc_traceback): 
     self.end = self.timer() # measure end time 
     self.elapsed_s = self.end - self.start # elapsed time, in seconds 
     self.elapsed_ms = self.elapsed_s * 1000 # elapsed time, in milliseconds 
+0

Eigentlich ist dies das erste "Zeit" -Programm, das ich geschrieben habe, aber wenn ich mit dem Modul ein wenig vertrauter bin, schaue ich es mir an, danke! – Samir

55

Sie diese sollten

verwenden
del record[-1] 

Das Problem mit

record = record[:-1] 

ist, dass es macht Kopie der Liste jedes Mal, wenn Sie einen Artikel entfernen, so ist nicht sehr effizient

+1

Dies ist eine bessere Lösung als die angenommene Antwort. –

18

list.pop() entfernt und gibt das letzte Element der Liste zurück.

Verwandte Themen