python - 使用 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 个元素。
解决方案
当您弹出第 9 个元素时,您之前的第 11 个元素将成为第 10 个元素。因此,在下一次迭代中,您将删除错误的元素。一个简单的解决方法是从最后删除。例如
for i in reversed(empty):
function.pop(i)
注意:在 python 中,您不必以 C 风格进行迭代(例如,a[i]
对于所有i
值)。可以直接写for value in values
。
推荐阅读
- c# - 在 .net core 3.1.1 Web 应用程序中更改 AzureAD 身份验证的 redirectURI 和 CallbackPath
- sql-server - 了解导致死锁的锁定行为
- c++ - 如何在没有解释的情况下修复 C++ 链接器错误
- php - laravel foreach 和 if else 在计数和变量中循环错误
- video - yuv420p10le(tv) 格式的位打包
- javascript - 将对象从 .filter() 函数返回到另一个模块的问题
- android - Gridlayout 布局在某些 android 上无法正常工作
- python - 变量与列表元素的比较操作
- python - 读取图像作为 Apache Beam 管道的输入
- node.js - Nodejs - 在域上部署网站实际上意味着什么以及如何去做?