Python易错题:删除列表中重复的元素

Python 遍历列表 删除元素遇到的问题:

问题:遍历删除某元素时,发现删除不干净,有元素未被删除。

原因分析:因为删除元素后,整个列表的元素会往前移动,而 i 却是在最初就已经确定了,是不断增大的,所以并不能得到想要的结果。

即 i是已经确定好的,但是remove元素后,所有列表元素都会向前移动,这样就会出现 :在位置2的元素被删后,之后位置元素向前补位,位置3 变成位置2,再根据遍历顺序 应该判断位置3的元素时,其实就是判断的之前的位置4的元素,导致有元素被遗漏。

错误代码示例:
 

def removeEle(nums,var):
    for i in nums:
        if i == var:
            nums.remove(i)
    return nums
print(removeEle([1,2,4,4,4,2,3],4)) # [1, 2, 4, 2, 3],可知并未删除干净

【可用双指针 删除重复元素】

看下下面例子:
问题:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

def removeElement(nums, val: int) -> int:
    # 双指针
    fast = slow = 0
    n = len(nums)
    while fast < n:
        if nums[fast] != val:
            nums[slow] = nums[fast]
            slow += 1
        fast += 1
    return slow

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值