人生苦短,我学python!
目录
前言:
列表可谓是python中使用最广泛、功能最强大的数据类型,今天我们就来了解一下列表的创建、增加、修改和删除,无论你是python小白,还是有一定基础的想要更进一步,我相信在这篇文章中一定有你想要的东西。接下来让我们进入正题。
1.列表的创建
(1)list()函数方法
(2)[]快捷方式创建
这些都比较简单就不过多叙述。
2.列表的增加
1)追加
(1)加法和形式
(2).append()方法
问题:
.append()方法参数任意,也就是说可以添加任意类型的数据到列表中,且对于可迭代类型数据也可通过切片形式获取。如下图:
(3).extend()方法
问题:
看到这里大家应该已经明白了,.extend()方法的参数只能是可迭代类型,且会把可迭代对象拆分后加入到列表中,这是.extend()方法与.append()方法的最根本的不同之处,那你会说如果加入不可迭代类型呢?会出现什么情况呢?
可以看到当我们试图通过.extend()添加一个整数的时候会出现TypeError的情况,这也是最基础的语法错误情况。
另外需要注意的是对于单个字符python解释器也认为是可迭代类型,这个应该还是比较好理解的,相当于迭代一次。对于字典类型我们应该知道,它属于一种映射关系,内部是不可解包的,也就是说不可迭代,而只单单研究字典的键的话,python解释器认为它为可迭代的,采用.extend()方法添加字典类型,也只会添加字典的键而不会添加其值,具体我们看实例。对于字典类型的使用我们将于下周讲述,望大家关注。
(4)切片方法
问题:
对于这种方法,并不是那么容易理解的,那到底是怎么回事呢?在这里先看两个例子。
小编的理解呢是这样的,对于python解释器来说列表类型是内部可变的,空间大小是不定的,这也是python列表的方便之处,不像c语言中的数组类型,需要固定空间大小。所以对于python解释器来说,它认为该列表大小其实就是你的内存大小,可以无限添加,自然也可访问,那为什么a[3]反而显示超出列表范围呢,这也是python解释器对内存空间的一种保护形式,原则上是不允许访问后续为赋值空间的。
该方法和.extend()方法更相像,它的赋值类型也许为可迭代类型,能不能像.append()方法一样添加一堆数据在一个位置呢?也是可以的,在这里就列举几个例子,更详细的解说大家可以参考python官方文档:5. 数据结构 — Python 3.9.5 文档
这里也有一点需要注意,demo[len(demo):]的切片形式,只要起始值(也就是len(demo))大于或等于列表长度便可以使用,为了方便起见且你并不一定知道列表长度的情况下采用[len(demo):]形式是最方便的,上述也有例子大家可自行查看。
2)局部添加
(1).insert()方法
(2)切片添加
如果认真思考与开发的话,你会发现实现同一件事情的方式有成千上万中,难道我们都要记住熟练使用吗?完全不需要,对于个人来讲如果是非教学性质,只是单纯的想完成任务或项目,只需熟练掌握一两种方法即可,面对一个问题知道怎么解决,用什么方法解决最高效、最简洁就足够了,所以呢在这里就不在深度挖掘了,大家感兴趣的话可以再想一想还有那些可用的方法呢?欢迎大家留言告诉我。在这里呢也建议大家对于列表局部元素的添加.insert()方法的时间复杂度为O(n),并不十分高效,不过却是最常用的一种方式,想要了解更高效的添加方式的话,建议大家可以翻看python高级编程类型的书籍,这里就不再介绍了。
3.列表的修改
(1)切片法
问题:
显然这种方法存在着局限性,也就是你要明确知道你所要修改元素所在列表中的位置,那如果不知道元素所在位置,只知道元素值怎么办呢?请看第二种方法。
(2).index()方法与切片的结合
问题:
当然大家也可以看出这里的索引为全索引,也就是说你需要完整的知道元素是什么,不能差一丝一毫,如果只知道元素部分形式该怎么办呢?这就需要用到正则表达式的模式匹配了,由于该函数库内容较多且复杂,一时半会是没办法说明白的,大家感兴趣的话可以自行查阅资料。
也许部分读者也会有这样的疑问,那如果想修改的元素在列表中重复了好几次,你这种方式到底修改的谁呢?如果知道大致元素所在列表的位置,能不能指定修改呢?答案是完全可以的,请看下面实例。
也就是说默认为第一个所查找到的位置,且只修改一次。
给定大致始末位置便可在自己想要更改的区域进行修改。
4.列表的删除
1)整体删除
(1)del方法
(2).clear()方法
问题:
这里需要注意.clear()方法与del方法的区别,.clear()方法只是删除了列表变量的内容,并未删除变量,通过上图可以看出我们仍然可以调用demo变量,只不过是一个空列表。而del方法是删除变量,可以看到,当我们执行del demo之后,再调用demo变量出现了NameError的异常,也就是未定义的意思。
2)局部删除
(1)del方法
(2).pop()方法
问题:
.pop()方法会有一个返回值,也可用于一次性数据的遍历问题,如在Douglas-Peuker算法中,通常采用while循环方式实现,那如何采用for循环实现呢?这是便可采用.pop()方法实现列表的动态变化。下面为一个简单的实例,具体含义是,如果列表中含有2就把列表第4个元素之后的元素全部删除并输出列表元素值。这里虽然未用到.pop()方法,但含义是一样的,我们主要想要说明的是对于可迭代对象遍历时,对象本身是可变的,完全可以对其进行修改。
(3).remove()方法
问题:
需要注意其与.pop()方法的区别所在,.pop()方法的参数为下标,而.remove()方法的参数为元素值,这两个函数可以说成是刚好配套的。
作者的话
这里只是简单的介绍了一下列表的创建、增加、修改、删除方法,对于其他的例如:反转、排序等并未介绍,但这并不代表不讲解,而是会在后续内容中讲解,后续会专门写一篇文章用来讲述列表常见函数的使用方法。人生苦短,我学python。关注我,带你用python玩转世界。