zoukankan      html  css  js  c++  java
  • Python中remove,pop,del的区别

    先上题:写出最终打印的结果

    a = [1, 2, 3, 4]
    for x in a:
        a.remove(x)
    print(a)
    
    print("=" * 20)
    
    b = [1, 2, 3, 4]
    for i in b:
        b.pop()
    print(b)
    print("=" * 20)
    
    c = [1, 2, 3, 4]
    for i in range(len(c)):
        del c[0]
    
    print(c)
    

      一开始一看应该都是[ ]吧??

    在机器上跑了一下:

    [2, 4]
    ====================
    [1, 2]
    ====================
    [ ]

    得到的结果如上,是不是很吃惊!!

    首先要弄明白remove,pop,del三者的区别

    1.用remove("")方法删除指定元素,没有该元素时报错.

    >>> number = [1,3,2,3,4]
    >>> number.remove(3)
    >>> print(number)
    [1, 2, 3, 4]
    >>> number.remove(5)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: list.remove(x): x not in list
    

    2.利用del[索引数] 函数删除指定索引数的元素

    >>> number = ['a','c','d']
    >>> del number[1] #删除指定索引数的元素
    >>> print(number)
    ['a', 'd']
    

    3.利用pop()方法弹出元素,当()内无索引数时默认弹出最后一个元素

    >>> number = [1,2,30,0]
    >>> number.pop() #无索引弹出最后一个元素
    0
    >>> number.pop(1) #弹出索引为1的元素
    2
    >>> print(number)
    [1, 30]
    

      以上是三者的用法,需要注意的是:del是python语句,而不是列表方法,无法通过list来调用

    对列表a看一下循环的索引的变化

    a = [1, 2, 3, 4]
    for index, x in enumerate(a):
        print("索引是{},去删除的值是{},列表的长度是{}".format(index, x, len(a)))
        a.remove(x)
        print("=" * 20)
    print(a)
    
    结果如下:
    
    索引是0,去删除的值是1,列表的长度是4
    ====================
    索引是1,去删除的值是3,列表的长度是3
    ====================
    [2, 4]
    

      列表的长度在变化,索引值也在变化。这个是容易忽视的一个点,原因是for循环的对象是一个可迭代的对象。

  • 相关阅读:
    爬虫 爬取糗事百科热门板块的信息
    爬虫 爬取豆瓣高分电影信息
    django model之Meta选项
    ubuntu下无法获得锁 /var/lib/apt/lists/lock – open (11: 资源暂时不可用)
    django 通过数据库表名获取app名
    JS自定义字符串格式化函数
    django 制作上传图片并预览的效果
    Django序列化
    Django以ajax方式提交form
    Manjaro20 Linux安装VS Code
  • 原文地址:https://www.cnblogs.com/materfont/p/9543577.html
Copyright © 2011-2022 走看看