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

Python易错题:删除列表中重复的元素,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/916022.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存