我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python3列表删除的三种方式实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python3列表删除的三种方式实现

1. 删除列表(list)的三种方式

(1).按照元素删除—remove()

  • 直接删除具体某个元素,remove里面传递的是元素的值
  • 从最左边开始寻找第一个符合要求的元素
  • remove函数没有结果返回
  • 如果没有对应的元素,则抛出错误
my_list = [1, 2, 3, 4, 2, 5]
my_list.remove(2)
print(my_list)


# 结果
[1, 3, 4, 2, 5]
my_list = [1, 2, 3, 4, 2, 5]
my_list.remove(6)				# 没有元素6,最终会抛出异常
print(my_list)


# 结果
Traceback (most recent call last):
  File "/Users/alien_test.py", line 58, in <module>
    my_list.remove(6)
ValueError: list.remove(x): x not in list

(2).按照索引删除—pop()

  • 根据索引删除某个元素
  • pop执行完会返回对应元素的值
  • pip()中如果不传递索引,则删除最后一位元素
  • pop删除的索引,如果越界会抛出异常
# 根据索引删除元素

my_list = [1, 2, 3, 4, 2, 5]
item = my_list.pop(1)
print(my_list)
print(item)


# 结果
[1, 3, 4, 2, 5]
2		# 元素2是对应索引为1的值
# 删除最后一个元素

my_list = [1, 2, 3, 4, 2, 5]
item = my_list.pop()
print(my_list)
print(item)


# 最终结果 
[1, 2, 3, 4, 2]
5
# 越界抛出异常

my_list = [1, 2, 3, 4, 2, 5]
item = my_list.pop(8)
print(my_list)
print(item)


# 结果
Traceback (most recent call last):
  File "/Users/test/alien_test.py", line 58, in <module>
    item = my_list.pop(8)
IndexError: pop index out of range

(3).按照索引删除—del()

  • 根据索引删除,最终结果没有返回值
  • 索引越界抛出异常
my_list = [1, 2, 3, 4, 2, 5]

del my_list[1]      #等同于 del(my_list[1])
print(my_list)


# 结果
[1, 3, 4, 2, 5]
my_list = [1, 2, 3, 4, 2, 5]
del my_list[8]
print(my_list)


# 异常结果
Traceback (most recent call last):
  File "/Users/test/alien_test.py", line 58, in <module>
    del my_list[8]
IndexError: list assignment index out of range

2. 删除元素引发的思考

(1).事故发生现场

【case 1:】

my_list = [1, 2, 2, 3, 2]
for item in my_list:
    if item == 2:
        my_list.remove(item)
print(my_list)


# [1, 3, 2]

【case 2:】

my_list = [1, 2, 2, 3, 2]
for index in range(len(my_list)):
    if my_list[index] == 2:
        my_list.pop(index)
print(my_list)



# 结果

Traceback (most recent call last):
  File "/Users/test/alien_test.py", line 59, in <module>
    if my_list[index] == 2:
IndexError: list index out of range

(2).列表----正序遍历的过程分析

my_list = [1, 2, 2, 3, 2]
for item in my_list:
    print("item-------->", item)
    if item == 2:
        my_list.remove(item)
print(my_list)


# 结果:

item--------> 1
item--------> 2
item--------> 3
item--------> 2
[1, 3, 2]

【分析过程:】

  • 如上过程,发现for循环的过程居然没有遍历所有的元素,打印的结果少一个索引位置为2的元素2
  • 具体原因是,for循环的时候,列表的元素是动态变化的。具体可参考如下过程

step1:列表的遍历过程如下

列表的遍历是通过游标来控制列表的位置,从索引为0号位一直到最后一个位置,依次遍历

step2:列表的删除某个元素流程如下

当遍历到索引为1的位置时候,准备删除这个位置元素

  • 删除完index=1这个元素之后,紧接着index=2的元素会向左移动到原始index=1的位置。此时,游标已经在index=1的位置。
  • 下一次再遍历的时候,游标会自增1,变为从index=2开始。而此时index=2的元素是3,跳过了原始的index=2的元素2。
  • 所以,如果有连续的相同的元素2,则会少遍历一次这个元素。如上2个案例,都是这个原因导致的问题。

(3).列表----倒序遍历的过程分析

my_list = [1, 2, 2, 3, 2]
for index in range(len(my_list) - 1, -1, -1):
    item = my_list[index]
    print("item-------->", index, "--->", item)
    if item == 2:
        my_list.pop(index)
print(my_list)


# 结果
item--------> 4 ---> 2
item--------> 3 ---> 3
item--------> 2 ---> 2
item--------> 1 ---> 2
item--------> 0 ---> 1


[1, 3]

1.通过倒序的遍历,可以把所有的2元素都删除了,倒序为什么能解决如上的问题?
2.倒序也会出现删除的元素的位置,被新元素占用的情况?

step1:列表倒序的遍历过程如下

step2:列表的删除某个元素流程如下

当遍历到索引为4的位置时候,准备删除这个位置元素

  • 删除完索引index=4的元素之后
  • 下一个遍历的索引是index=3,此时游标在index=3的位置,从元素3开始再遍历
  • 当删除index=2的元素2的时候,因为这个元素前面的所有索引的位置都没有变动,所以再下一次,还能遍历到index=1的第一个2
  • 最终,倒序最大的优势是,从后往前遍历,而前面所有元素的索引是没有变动的,固后续的遍历过程没有受是否删除元素的影响。这个是倒序最核心的优势!!!

3. 删除列表中重复的元素

(1).根据索引删除—(如上倒序的方式)

my_list = [1, 2, 2, 3, 2]
for index in range(len(my_list) - 1, -1, -1):
    item = my_list[index]
    print("item-------->", index, "--->", item)
    if item == 2:
        my_list.pop(index)
print(my_list)

(2).根据元素删除—(结果正确,但是过程是错误)

my_list = [1, 2, 2, 3, 2]
for index in range(len(my_list) - 1, -1, -1):
    item = my_list[index]
    print("item-------->", index, "--->", item)
    if item == 2:
        my_list.remove(item)
        print("--->", my_list)
print(my_list)


# 结果

item--------> 4 ---> 2
---> [1, 2, 3, 2]				# 此处倒序遍历,其实删除的是从左向右的第一个元素2

item--------> 3 ---> 2
---> [1, 3, 2]					# 此除遍历的是第二个2,删除的也是第二个元素


item--------> 2 ---> 2
---> [1, 3]						# 次数遍历的是最后一个2,删除的也是这个元素

item--------> 1 ---> 3
item--------> 0 ---> 1

[1, 3]

如上的方式不好的地方是:

  • 倒序遍历了,但是最终删除的元素是从左向右排序的元素。如果出现多个相同的元素,则删除的不是当前遍历到的元素。
  • 次方法, 慎重使用!!!

到此这篇关于Python3列表删除的三种方式实现的文章就介绍到这了,更多相关Python3列表删除内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python3列表删除的三种方式实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL删除表的三种方式(小结)

drop table drop 是直接删除表信息,速度最快,但是无法找回数据 例如删除 user 表:drop table user;truncate (table) truncate 是删除表数据,不删除表的结构,速度排第二,但不能与wh
2022-05-18

Python列表删除的三种方法代码分享

1、使用del语句删除元素>>> i1 = ["a",'b','c','d']>>> del i1[0] >>> print(i1) ['b', 'c', 'd'] >>>del语句将值从列表中删除后,就再也无法访问它了。2、使用pop()
2022-06-04

Python实现列表删除重复元素的三种常用方法分析

本文实例讲述了Python实现列表删除重复元素的三种常用方法。分享给大家供大家参考,具体如下: 给定一个列表,要求删除列表中重复元素。listA = ['python','语','言','是','一','门','动','态','语','言'
2022-06-04

numpy删除单行、删除单列、删除多列实现方式

摘要:本文介绍了使用NumPy删除数据的方法,包括删除单行、单列和多列。可使用np.delete()函数删除行或列,并指定要删除的索引。要删除多列,可以传递多个索引给np.delete()函数。此外,本文还介绍了其他用于删除数据的NumPy函数。
numpy删除单行、删除单列、删除多列实现方式
2024-04-02

MySQL删除数据的三种方式

MySQL删除数据有以下三种方式:1. 使用DELETE语句:使用DELETE语句可以删除表中的一条或多条数据。语法如下:DELETE FROM 表名 WHERE 条件;其中,表名是要删除数据的表名,WHERE后面是删除的条件。例如,删除s
2023-09-22

Mysql三种常用的删除数据或者表的方式

本文介绍了MySQL删除数据的三种常用方式:DELETE语句:根据特定条件删除表中行。TRUNCATETABLE语句:快速删除表中所有行,比DELETE更快。DROPTABLE语句:删除表及其所有数据,注意不可撤销。选择删除方式取决于具体情况,DELETE用于根据条件删除特定行,TRUNCATETABLE用于快速删除所有行,DROPTABLE用于删除整个表。
Mysql三种常用的删除数据或者表的方式
2024-04-02

Python反转列表的三种方式

方式一:使用reversed()函数a=[1,2,3,4,5,6,7,8,9]b=list(reversed(a))print b注意:reversed()函数返回的是一个迭代器,而不是一个List,需要再使用List函数转换一下。方式二:
2023-01-31

Oracle怎么删除数据,Oracle数据删除的三种方式

目录oracle怎么删除数据drop命令truncate命令delete命令关于truncate的小小总结最后Oracle怎么删除数据删除表(记录和结构)的语句delete——truncate—&mda
2023-02-15

Redis批量删除Key的三种方式小结

目录一.使用命令行批量删除Redis的key二.使用图形界面工具RedisDesktopManager三.使用jedis批量删除keysRedis 中有删除单个 Key 的指令 del,但好像没有批量删除 Key 的指令,不过我们可以借助
2023-04-10

Python列表中多元素删除(移除)的实现

本文主要介绍了Python列表中多元素删除(移除)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-10

python 的列表遍历删除实现代码

python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错,例如l = [1,2,3,4] for i in l:if i != 4:l.remove(i) print l这几句话本来意图是想清空列
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录