如何从列表中弹出多个项目?

How to pop many items from list?

我想从列表中弹出某些项目。这是我的代码:

lst = [1,2,3,4,5,6,7,8,9]
popVal = [0, 5, 8]
for i in popVal:
    lst.pop(i)

预期输出应为 [2,3,4,5,7,8],因为索引 058 已从 lst

中删除

但是,我得到一个错误:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: pop index out of range

如果我打印列表,这就是输出

[2, 3, 4, 5, 6, 8, 9]

每次弹出一个元素时,列表都会缩小。因此,例如,以前位于索引 8 的内容现在位于索引 3。

假设您的 popVal 列表严格按升序排列,以下修改后的代码将起作用

lst = [1,2,3,4,5,6,7,8,9]
popVal = [0, 5, 8]
for n, i in enumerate(popVal):
    lst.pop(i - n)

这确保随着列表的缩小,要从中弹出的索引也会相应地缩小。

您应该向后遍历 popVal 并首先弹出最后一项:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
popVal = [0, 5, 8]
for i in popVal[::-1]:
    lst.pop(i)