2013-08-11 13 views
23

Ho questo programma che calcola il tempo impiegato per rispondere a una domanda specifica e esce dal ciclo while quando la risposta non è corretta, ma voglio cancellare l'ultimo calcolo, quindi posso chiamare min() e non è il momento sbagliato , scusa se questo è confuso.Python | Come eliminare l'ultimo elemento nell'elenco?

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

risposta

3

è necessario scaricare:

record = record[:-1] 

prima del ciclo for.

Questo imposterà record all'attuale lista record ma senza l'ultimo elemento. È possibile, in base alle proprie esigenze, assicurarsi che l'elenco non sia vuoto prima di farlo.

+0

Ci vediamo, grazie! – Samir

+2

Potresti usare anche 'record.pop()'? (NB: Sono molto nuovo per Python) – CodeBeard

+1

Sì, è possibile utilizzare anche record.pop(). Vedi http://docs.python.org/3.3/tutorial/datastructures.html – Bastiano9

2

Se si fanno un sacco con tempismo, posso raccomandare questo piccolo manager (20 linee) contesto:

codice Si potrebbe assomigliare questo allora:

#!/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] 

Solo per riferimento, ecco il contenuto del Timer contesto manager in piena:

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

In realtà questo è il primo programma "tempo" che ho scritto, ma quando avrò un po 'più familiarità con il modulo, darò un'occhiata a esso, grazie! – Samir

55

si dovrebbe utilizzare questo

del record[-1] 

Il problema con

record = record[:-1] 

è che rende un copia dell'elenco ogni volta che rimuovi un oggetto, quindi non è molto efficiente

+1

Questa è una soluzione migliore rispetto alla risposta accettata. –

18

list.pop() rimuove e restituisce l'ultimo elemento dell'elenco.

Problemi correlati