Python for循环和list组合中删除元素陷阱(详细解释)

for循环整个列表,在循环体中判断,如果这个数字是奇数,使用remove删除

num = [1,2,3,4,5,6]
for i in num:
    if i % 2 !=0:
        num.remove(i)
print("结果比较一:",num)
num1 = [1,2,3,4,5,7]
for j in num1:
    if j % 2 !=0:
        num1.remove(j)
print("结果比较二:",num1)
运算结果
结果比较一: [2, 4, 6]
结果比较二: [2, 4, 7]

Process finished with exit code 0
解释:

从下标为0的第一个元素开始,数字为奇数,程序做删除动作;但是删除之后,由于我们操作的是原列表,删除1之后,后面的2,3,4,5,7下标会统一减一;程序会认为元素2的下标为0,程序会认为下标为0位置的元素已经遍历过,所以不对2进行判断,继续往下走。

第二种方式-从右往左逆序

num3 = [1,2,3,4,5,7]
for n in num3[::-1]: #利用列表当中的切片操作,逆向遍历
    if n %2 !=0:
        num3.remove(n)
print("结果比较三:",num3)
运算结果
结果比较一: [2, 4, 6]
结果比较二: [2, 4, 7]
结果比较三: [2, 4]

Process finished with exit code 0

第三种方式-列表推导式

num4 = [1,2,3,4,5,7]
#使用列表推导式,直接把想要的数据提取出来
li = [li for li in num4 if (li%2==0)]
print("结果比较四:",li)
运算结果
结果比较一: [2, 4, 6]
结果比较二: [2, 4, 7]
结果比较三: [2, 4]
结果比较四: [2, 4]

Process finished with exit code 0
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值