python列表中remove()函数的使用方法详解

作者:士别三日wyx 时间:2021-05-13 22:52:46 

1. 基本使用

remove() 函数可以删除列表中的指定元素

语法

list.remove( element )

参数

  • element:任意数据类型(数字、字符串、列表等)

2. 删除普通类型元素

删除一个列表中「存在」的数字或字符串


list1 = ['zhangsan', 'lisi', 1, 2]
list1.remove(1)  # 删除数字
print(list1)
list1.remove('zhangsan')  # 删除字符串
print(list1)

输出:

['zhangsan', 'lisi', 2]

['lisi', 2]

如果列表中「不存在」想要删除的元素,则会报错


list1 = [1, 2, 3]
list1.remove(4)

输出:

Traceback (most recent call last):

  File "E:/data/PrCharm/test1/55.py", line 2, in <module>

    list1.remove(4)

ValueError: list.remove(x): x not in list

# 值错误: 需要删除的值不在列表中

3. 删除对象类型元素

删除一个列表中「存在」的对象元素(列表、元祖等)


list1 = [1, 2, [3, 4], (5, 6)]
a = [3, 4]
b = (5, 6)
list1.remove(a)  # 删除列表类型
print(list1)
list1.remove(b)  # 删除元祖类型
print(list1)

输出:

[1, 2, (5, 6)]

[1, 2]

需要注意的是:remove删除对象类型的前提是,列表中的某个「元素」是对象类型,以下这种方式会报错


list1 = [1, 2, 3]
list1.remove([1,2])

输出:

Traceback (most recent call last):

  File "E:/data/PrCharm/test1/55.py", line 2, in <module>

    list1.remove([1,2])

ValueError: list.remove(x): x not in list

# 值错误: 需要删除的值不在列表中

4. 一次只删一个元素

        上面的案例中,列表 [1, 2] 看似在列表 [1, 2, 3] 中存在,实际上, remove() 函数判断元素是否在列表中存在的标准是:匹配列表中的「单个元素」,而不是整个列表。

         remove() 函数会遍历列表中的每一个元素,查看是否有元素与之匹配,匹配到相同的元素才会执行删除,这也就意味着 remove() 函数一次只能删除一个元素。

       自己删自己也不行,因为自己并不在自己的元素中


list1 = [1, 2, 3, 4, 5]
print('我自己在我自己里面吗?', list1 in list1)
list1.remove(list1)

输出:

Traceback (most recent call last):

  File "E:/data/PrCharm/test1/55.py", line 3, in <module>

    list1.remove(list1)

ValueError: list.remove(x): x not in list

我自己在我自己里面吗? False

5、Python列表的remove方法的注意事项

python列表中remove()函数的使用方法详解

为何没有删除列表中的全部元素?

解释:

按照执行顺序,第一个空格被删除之后,后面的元素会前移(变成['空格','空格','12','23']),指针下一次会指向新列表的第二个元素(即初始状态的第三个空格),从而初始状态的第二个空格被跳过了,初始第三个空格被删除,接着后面的元素又再次前移(变成['空格','12','23']),指针指向新列表的第三个元素,即初始状态的第5个元素23,然后23被删除了,因此只剩下['空格','12']

如果想排除初始列表中的部分元素,如何实现?

由上面的情况知道,在遍历列表的同时对列表执行删除操作,会造成意外的结果,那么对初始列表进行遍历,对初始的列表的副本执行删除操作呢?

python列表中remove()函数的使用方法详解

以上结果显示,没有得到预期效果。为什么?

问题出在copy=ls这一句,这里仅仅是使得copy与ls指向了同一片内存(即浅拷贝,shallow copy),并没有执行【开辟一片新内存,并且ls内存中的内容复制到新内存,然后使copy指向新开辟的内存,即深拷贝,deep copy】这一系列操作。因此对copy执行的remove操作,和对遍历ls列表,实质上还是都是针对同一片内存进行操作,因此结果上一个例子类似。

若想解决这一问题,有3个办法法:

(1)


ls=[' ',' ',' ','12','23','abc','aa']

copy=[' ',' ',' ','12','23','abc','aa']

这一办法对于已知列表的所有元素,且元素数量较少,结构较简单时可行,其他情况下不可行。

(2)引入copy模块的deepcopy方法:

python列表中remove()函数的使用方法详解

(3)另外准备一个空列表,遍历初始列表时,将符合条件的元素逐一加入到空列表当中(利用列表的append方法)。

这种方法,思路上与remove方法相反,但执行的操作差不多,时间复杂度也与remove方法差不多,无需引入copy模块。

另外,对于列表的remove方法,python基础教程第二版给出的说明是:

remove方法用于移除列表中某个值的第一个匹配项:

>>>x=['to','be','or','not','to','be']

>>>x.remove('be')

>>>x

['to','or','not','to','be']

来源:https://blog.csdn.net/wangyuxiang946/article/details/122145813

标签:python,列表,remove()
0
投稿

猜你喜欢

  • CentOS 6.3安装配置nginx+php+mysql

    2023-11-24 11:11:33
  • 用于分页的两个Asp函数

    2007-09-07 10:09:00
  • 基于python3 类的属性、方法、封装、继承实例讲解

    2022-12-09 17:54:02
  • Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

    2022-10-26 19:49:05
  • ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)

    2012-06-06 20:11:21
  • IE10增强对HTML5和CSS3的支持

    2011-09-16 20:16:28
  • 浅谈python标准库--functools.partial

    2023-01-03 20:08:36
  • Python Selenium 之关闭窗口close与quit的方法

    2023-11-14 01:28:06
  • Python学习pygal绘制线图代码分享

    2022-12-02 10:51:48
  • 用Python抢火车票的简单小程序实现解析

    2023-09-06 06:31:28
  • Python3.7 读取 mp3 音频文件生成波形图效果

    2022-09-08 18:02:25
  • Python语言描述机器学习之Logistic回归算法

    2023-08-31 01:14:35
  • 解析SQL Server 2008中的新语句:MERGE

    2009-01-13 13:57:00
  • 如何解决MySQL的客户端不支持鉴定协议

    2008-11-27 17:10:00
  • wxpython 最小化到托盘与欢迎图片的实现方法

    2022-03-04 12:52:42
  • python实现用户名密码校验

    2022-12-14 07:48:33
  • 详解python __init__.py 和 __all__作用

    2023-08-22 06:55:22
  • Dreamweaver如何防止及消除垃圾代码的产生

    2007-11-13 17:15:00
  • JS实现仿Windows经典风格的选项卡Tab切换代码

    2023-08-25 05:33:54
  • 对numpy下的轴交换transpose和swapaxes的示例解读

    2022-09-11 10:30:51
  • asp之家 网络编程 m.aspxhome.com