首页 > 解决方案 > 使用 pop() 删除多个项目时的问题

问题描述

测试代码:

function=['6005', '6110', '6016', '6104', '6151', '6008', '6112', '6062', '6018', [], '6024', [], '6018', '6012', '6027', '6147', '6028', '6027', '6155', '6004']
empty=[]
for i in range(len(function)):
    if function[i]==' ':
        empty.append(i)
    elif function[i]==[]:
        empty.append(i)
print(empty)
for i in range(len(empty)):
    function.pop(empty[i])
print(function)

如我们所见,函数 [9] 和函数 [11] 为空我成功找到了地址[9, 11](这就是第一次打印所做的)

但我未能删除列表中的这两个元素

我有

['6005', '6110', '6016', '6104', '6151', '6008', '6112', '6062', '6018', '6024', [], '6012', '6027', '6147', '6028', '6027', '6155', '6004']

结果,它只是弹出函数[9],但函数[11]仍然存在

为什么会发生这种情况以及如何同时删除函数 [9] 和函数 [11]?

PS:我必须这样做,而不是简单地删除我找到的每个'[]'。这只是程序的一部分,我需要使用这些地址来删除另一个列表中的第 10 个和第 12 个元素。

标签: python

解决方案


当您弹出第 9 个元素时,您之前的第 11 个元素将成为第 10 个元素。因此,在下一次迭代中,您将删除错误的元素。一个简单的解决方法是从最后删除。例如

for i in reversed(empty):
    function.pop(i)

注意:在 python 中,您不必以 C 风格进行迭代(例如,a[i]对于所有i值)。可以直接写for value in values


推荐阅读