2013-08-11 3 views
23

У меня есть эта программа, которая вычисляет время, затраченное на ответ на конкретный вопрос, и выходит из цикла while, когда ответ неверен, но я хочу удалить последний расчет, поэтому я могу позвонить min(), и это не будет неправильным временем , извините, если это сбивает с толку.Python | Как удалить последний элемент в списке?

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

ответ

38

Если я понял вопрос правильно, вы можете использовать для нарезки обозначения, чтобы сохранить все, кроме последнего пункта:

запись = запись [: - 1]

Код может использовать некоторые Идиомы Python. Я настоятельно рекомендую прочитать это: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

+1

Удивительная ссылка, я сохраню ее в заднем кармане. – SethMMorton

3

Понадобится:

record = record[:-1] 

перед циклом for.

Это установит record в список record, но без последний элемент. Вы можете, в зависимости от ваших потребностей, хотеть, чтобы список не был пустым, прежде чем делать это.

+0

Я вижу, спасибо! – Samir

+2

Не могли бы вы также использовать 'record.pop()'? (NB: я очень новичок в python) – CodeBeard

+1

Да, вы также можете использовать record.pop(). См. Http://docs.python.org/3.3/tutorial/datastructures.html – Bastiano9

2

Если вы много с времени, я могу рекомендовать этот маленький (20 линия) контекстный менеджер:

Вы код может выглядеть это тогда:

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

Просто для справки, вот содержание менеджера Timer контекста в полном объеме:

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

На самом деле это первая программа «времени», которую я написал, но когда я получу немного больше знакомы с модулем, я посмотрю на нее, спасибо! – Samir

55

вы должны использовать эту

del record[-1] 

Проблема с

record = record[:-1] 

ли, что это делает копия списка при каждом удалении изделия, поэтому не очень эффективно

+1

Это лучшее решение, чем принятый ответ. –

18

list.pop() удаляет и возвращает последний элемент списка.

Смежные вопросы