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