如何删除列表中的最后一项?

Sam*_*mir 118 python time python-3.x

我有这个程序计算回答特定问题所花费的时间,当答案不正确时退出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))
Run Code Online (Sandbox Code Playgroud)

seb*_*ian 187

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

record = record[:-1]
Run Code Online (Sandbox Code Playgroud)

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

del record[-1]
Run Code Online (Sandbox Code Playgroud)

代码可以使用一些Python习语.我强烈建议您阅读:
代码像Pythonista:惯用Python(通过支路机器存档).

  • @Longurimont你能解释一下它有什么副作用吗? (3认同)
  • del record[-1] 有副作用。这是一个糟糕的设计,如果可能的话应该避免。 (2认同)

Joh*_*ooy 139

你应该用这个

del record[-1]
Run Code Online (Sandbox Code Playgroud)

这个问题

record = record[:-1]
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个比接受的答案更好的解决方案. (7认同)

Mac*_*Gol 82

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


Gre*_*uFn 10

list.pop() 如果您想以另一种方式使用,只需立即使用:list.popleft()


mon*_*mon 10

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

record = [1,2,3]
*record, _ = record
record
---
[1, 2]
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 9

你需要:

record = record[:-1]
Run Code Online (Sandbox Code Playgroud)

for循环之前.

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

  • 你还可以使用`record.pop()`吗?(注意:我对python很新) (3认同)
  • 是的,您也可以使用record.pop()。参见http://docs.python.org/3.3/tutorial/datastructures.html (2认同)
  • @CodeBeard,你_could_使用`pop`但是如果你只想扔掉这个东西,那就不是真的有必要了. (2认同)
  • 确保你没有*将pop()返回的值分配给记录.否则,您将在记录中存储列表的最后一个值. (2认同)