007_Python列表练习_案例_删除数组中连续的重复项

给定一个排序数组,你需要原地删除重复出现的元素,使得每个元素仅出现一次,返回移除后数组的新长度,不要使用额外的数组空间,必须在原地修改输入数组并使用o(1)额外空间下完成

思路1:遍历列表nums,然后与后一项元素进行对比。如果相等, 则删除后一项数据;不等, 则继续向后遍历。出现问题啦o(≧口≦)o!

def fun_a(nums):
    i = 0
    # 1. 遍历列表nums
    while i < len(nums)-1:
    	# 2. 与后一项元素进行对比
        if nums[i] == nums[i+1]:
        	# 2.1 如果相等, 则删除后一项数据
            del nums[i+1]
        # 2.2 不等, 则继续向后遍历
        i += 1
    print(nums)

if __name__ == "__main__":
    nums = [0, 1, 1, 1, 2, 2, 3, 3, 4]
    fun_a(nums)

执行结果:
在这里插入图片描述

结果分析:删除连续重复数据,正向遍历存在的问题
在这里插入图片描述
思路2:在不借助另一列表暂存元素的时候,通过反向遍历列表nums,然后与前一项元素对比。如果相等, 则删除该位置上的数据;不等, 则继续向前遍历。成功啦O(∩_∩)OYES!

def fun_b(nums):
    # 1. 反向!遍历列表nums
    i = len(nums)-1
    while i > 0:
        # 2. 与前一项元素进行对比
        if nums[i] == nums[i-1]:
            # 2.1 如果相等, 则删除该位置的数据
            del nums[i]
        # 2.2 不等, 则继续向前遍历
        i -= 1
    print(nums)

if __name__ == "__main__":
    nums = [0, 1, 1, 1, 2, 2, 3, 3, 4]
    fun_b(nums)

执行结果:
在这里插入图片描述
思路3:在不考虑原地删除的情况下,可以直接利用集合set去重~~

nums = [0, 1, 1, 1, 2, 2, 3, 3, 4]
print(set(nums))

思考:在程序设计中,对于连续重复数据(并列条件的判断)的删除操作等要当心!不可想当然的去假设(◐_◑)

发布了37 篇原创文章 · 获赞 0 · 访问量 5333

猜你喜欢

转载自blog.csdn.net/qq_21156327/article/details/103412810