小李飞刀:python我来做题啦

栏目: Python · 发布时间: 6年前

内容简介:最近都在忙年底的年会,还沉迷于学习统计学,python教程还停留在基础语法。但是仔细规划了下,还是要好好的瞄准目标前行。所以准备呢,实战走起来。

好久不见

最近都在忙年底的年会,还沉迷于学习统计学,python教程还停留在基础语法。

但是仔细规划了下,还是要好好的瞄准目标前行。

所以准备呢,实战走起来。

做题做题

无论如何,数据结构还是很重要的,所以准备每天刷leetcode的题目啦。

慢慢的恢复数据结构知识,也实际的写一写python。

第一题

27.移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

class Solution:
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        for i in nums:
            if i == val:
                nums.remove(i)
        print(len(nums))
   #这是第一版本的解法

但是测试出错了

小李飞刀:python我来做题啦

末尾的2没有消除,数组中间的2是消除了的。为什么最后一个2会被错过呢。

小李飞刀:python我来做题啦

不死心的又测试了下,果然是最后一个值会被错过。

class Solution:
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        length = len(nums)
        for i in range(length)
            if nums[i] == val:
                nums.remove(i)
        print(len(nums))
       #随手改了改

这个版本也是通过for in 循环,根据下标进行查找,但是有个弊端,可能会越界。因为数组移除之后会变短,但是length没有更改。

所以还是原来的根据nums直接for in更便捷,所以我们来找找为什么最后一个数值会被跳过吧~

搜索了下发现有答案 python:在for遍历list时使用remove出现的问题以及解析

因为remove删除元素后,指针数组所有数字前移,但是指针正常后移,所以,当到达最后一个数值的时候,指针早就不指向它了。

既然知道了原因,我们来想想怎么解决这个问题吧!发现了个解决方案 慎用 python 的pop和remove方法

看来要慎用remove呢

新方法来啦~

class Solution:
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        for i in nums[:]:
            if i == val:
                nums.remove(i)
        print(len(nums))

这是因为x[:]与x不是同一个list,相当与把x的内存拷贝到一块新的内存,当对x做remove操作的时候,新的内存list并没有受影响。

然后成功提交啦,这是一个新的开始~开心

用4行解决了一道题~python你真棒!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming in Haskell

Programming in Haskell

Graham Hutton / Cambridge University Press / 2007-1-18 / GBP 34.99

Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduc......一起来看看 《Programming in Haskell》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具