Python | Как удалить последний элемент в списке?

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

del record[-1]

Проблема с

record = record[:-1]

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

Ответ 3

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

Ответ 4

Вам нужно:

record = record[:-1]

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

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

Ответ 5

Если вы делаете много времени, я могу порекомендовать этот небольшой менеджер контекста (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