python中数组nums[:]和nums的区别

 更新时间:2023年07月03日 10:18:59   作者:风雨_83  
本文主要介绍了python中数组nums[:]和nums的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

leetcode中有一道题。题目为:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

错误代码:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        for i in nums:
            print('----', i)
            if i == val:
                nums.remove(val)
                print(len(nums),nums)
        print(nums)
        return len(nums)

正确代码:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        for i in nums[:]:
            print('----', i)
            if i == val:
                nums.remove(val)
                print(len(nums),nums)
        print(nums)
        return len(nums)

从以上可以看到,他们之间差了一个[:]

但是单独执行:

  for i in nums[:]:
        print('i',i)
    for ii in nums:
        print('ii',ii)

输出结果一抹抹一样样,这是为什么呢?

在 Python 中,nums 是一个列表对象。nums[:] 表示对这个列表进行切片操作,切片操作的结果是返回一个新的列表对象,其中包含了原列表中的所有元素。
虽然 nums 和 nums[:] 看起来很相似,但它们之间有一个重要的区别。当你将 nums 分配给某个变量时,该变量实际上仅仅是指向了原始列表对象的引用,因此对该变量的任何更改都会反映在原始列表对象上。例如:

nums = [1, 2, 3]
new_nums = nums
new_nums[0] = 0
print(nums)  # 输出 [0, 2, 3]

然而,如果你使用 nums[:] 来创建一个新的列表对象,则对新列表对象的任何更改都不会影响原始列表对象。例如:

nums = [1, 2, 3]
new_nums = nums[:]
new_nums[0] = 0
print(nums)  # 输出 [1, 2, 3]

在这个例子中,我们使用 nums[:] 创建了一个新的列表对象 new_nums,并将其赋值给变量 new_nums。然后我们修改了 new_nums 中的第一个元素,但是原始列表 nums 没有被修改。

因此,nums 和 nums[:] 的区别在于,前者是一个指向原始列表对象的引用,而后者是一个新的、独立的列表对象。

由此可以解释上列leetcode题解了。实际上切片是生成了一个新的拷贝。而不是引用。

到此这篇关于python中数组nums[:]和nums的区别的文章就介绍到这了,更多相关python nums[:]和nums内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 写入csv乱码问题解决方法

    python 写入csv乱码问题解决方法

    这篇文章主要介绍了python 写入csv乱码问题解决方法的相关资料,需要的朋友可以参考下
    2016-10-10
  • Python 元组(Tuple)操作详解

    Python 元组(Tuple)操作详解

    Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可
    2014-03-03
  • Python如何爬取b站热门视频并导入Excel

    Python如何爬取b站热门视频并导入Excel

    这篇文章主要介绍了Python如何爬取b站热门视频并导入Excel,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • PyCharm鼠标右键不显示Run unittest的解决方法

    PyCharm鼠标右键不显示Run unittest的解决方法

    今天小编就为大家分享一篇PyCharm鼠标右键不显示Run unittest的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python输出第n个默尼森数的实现示例

    python输出第n个默尼森数的实现示例

    这篇文章主要介绍了python输出第n个默尼森数的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Pycharm开发Django项目创建ORM模型的问题

    Pycharm开发Django项目创建ORM模型的问题

    ORM,全称Object Relational Mapping,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句,下面通过本文给大家介绍Pycharm开发Django项目ORM模型介绍,感兴趣的朋友一起看看吧
    2021-10-10
  • 跟老齐学Python之再深点,更懂list

    跟老齐学Python之再深点,更懂list

    对于list,由于她的确非常非常庞杂,在python中应用非常广泛,所以,虽然已经介绍完毕了基础内容,这里还要用一讲深入一点点,往往越深入越...
    2014-09-09
  • 浅谈Django中view对数据库的调用方法

    浅谈Django中view对数据库的调用方法

    今天小编就为大家分享一篇浅谈Django中view对数据库的调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Windows系统下cython_bbox库的正确安装步骤

    Windows系统下cython_bbox库的正确安装步骤

    Cython-bbox一般无法直接通过pip直接安装,那么如何安装呢?下面这篇文章主要给大家介绍了关于Windows系统下cython_bbox库的正确安装步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • python中文字符如何转url编码

    python中文字符如何转url编码

    这篇文章主要介绍了python中文字符如何转url编码问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论