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