python删除列表中元素的问题

近期写python删除列表元素时遇到一个问题
删除列表下标以及删除列表指定元素无法正常执行程序,话不多说,直接上代码。

tempory=[
        {
            "permissionGroupName": "1",
            "permissionName": "1",
            "applist": []
        },
        {
            "permissionGroupName": "2",
            "permissionName": "2",
            "applist": []
        },
        {
            "permissionGroupName": "3",
            "permissionName": "3",
            "applist": []
        },
        {
            "permissionGroupName": "4",
            "permissionName": "4",
            "applist": []
        },
        {
            "permissionGroupName": "5",
            "permissionName": "5",
            "applist": []
        },
        {
            "permissionGroupName": "6",
            "permissionName": "6",
            "applist": []
        }
            ]
for i in tempory:
    if i["applist"] == []:
        tempory.remove(i)
运行完结果是
[{'permissionGroupName': '2', 'permissionName': '2', 'applist': []}, {'permissionGroupName': '4', 'permissionName': '4', 'applist': []}, {'permissionGroupName': '6', 'permissionName': '6', 'applist': []}]


可以看到并没有把所有的"applist"满足条件的字典删除,使用del结果也是一样,在这里笔者就不一一演示了,感兴趣的同学可以自己去试验一下,接下来分析为什么会发生这样的情况。
当删除第一个元素{  "permissionGroupName": "1",
        	      "permissionName": "1",
        		  "applist": []}
 时,第二个元素就变成了第一个元素,此时遍历则进行到了下一个元素,所以条件判断略过了此时的第一个元素 值为2的字典,如结果所示删除了值为3的字典。
正确的代码应该是
i = 0
while i < len(tempory):
    if tempory[i]["applist"] == []:
        del tempory[i]
        continue
    i += 1
这样就可以在删除的时候确保遍历列表下标不变化,不删除的时候遍历下一个元素,使得程序正常运行。而在列表添加则没有这样的问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值