218

我有这个程序可以计算回答特定问题所需的时间,并在答案不正确时退出 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))
4

8 回答 8

341

如果我正确理解了这个问题,您可以使用切片符号来保留除最后一项之外的所有内容:

record = record[:-1]

但更好的方法是直接删除该项目:

del record[-1]

注意1:注意使用record = record[:-1]并没有真正删除最后一个元素,而是将子列表分配给record。如果您在函数中运行它并且记录是一个参数,这会有所不同。使用 record = record[:-1] 原始列表(函数外部)未更改,使用 del record[-1] 或 record.pop() 更改列表。(如@pltrdy 在评论中所述)

注 2:代码可以使用一些 Python 习语。我强烈推荐阅读这篇文章:
Code Like a Pythonista: Idiomatic Python (via wayback machine archive)。

于 2013-08-11T08:10:03.703 回答
175

你应该用这个

del record[-1]

问题与

record = record[:-1]

是不是每次删除项目时都会复制列表,所以效率不高

于 2013-08-11T09:05:04.660 回答
136

list.pop()删除并返回列表的最后一个元素。

于 2013-08-11T15:19:23.360 回答
11

现在只需简单地使用list.pop() ,如果你想要它,另一种方式使用:list.popleft()

于 2019-11-16T20:52:20.587 回答
10

你需要:

record = record[:-1]

for循环之前。

这将设置record为当前record列表,但没有最后一项。根据您的需要,您可能希望在执行此操作之前确保列表不为空。

于 2013-08-11T08:08:10.487 回答
4

您必须使用 *list,_ = list,如下例所示

record = [1,2,3]
*record,_ = record
record
---
[1, 2]
于 2021-04-30T01:19:23.263 回答
3

如果你在时间上做了很多事情,我可以推荐这个小(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
于 2013-08-11T08:11:54.320 回答
1

如果你有一个列表列表(在我的例子中是tracked_output_sheet),你想从每个列表中删除最后一个元素,你可以使用以下代码:

interim = []
for x in tracked_output_sheet:interim.append(x[:-1])
tracked_output_sheet= interim
于 2018-06-14T18:42:55.910 回答