序言:在python中有四大数据结构:列表、元组、字典、集合,今天先重点讲解的是列表。
首先以一张思维导图来了解一下今天要学的内容

一、列表的定义
一种可变序列类型,可以存储不同类型的元素,内部数据有序排列,结构富有弹性,可变。
二、列表的创建
以一段代码来示例:

三、列表常用的方法
3.1、sort
就地修改,默认升序排序,下面以一段代码来了解sort的用法。

当reverse==True时,降序排序如下:

当key=str时

将元素转换成字符串进行比较,决定先后次序,但不影响输出。
注意列表不能对包含不同类型的元素进行排序,如混和列表中及包含数字又包含字符串。
3.2、reverse
反转列表中的元素顺序。如下代码所示

它是直接修改原列表,没有返回值。
那么它的效率如何呢?
reverse的时间复杂度是O(n),他需要遍历列表中大约一半的元素进行翻转操作,规模越大,耗费时长越长。这里不推荐使用,如果你想把列表颠倒过来,可以使用负索引。如:

3.3、count
统计元素在列表中出现的次数,下面以一段代码示例它的用法。

9在l1列表中出现了2次所以打印2。
它的效率如何呢?
极差,时间复杂度是O(n),随数据规模的增大而性能下降,耗时增长,建议是能不用则不用
四、列表的基本操作
4.1访问
4.1.1index
输入想访问的值,返回从左到右搜索到的第一个元素索引,如下代码所示

index效率如何呢?index需要遍历元素,效率极差
4.1.2索引访问
请看如下代码所示:


它的效率如何呢?答案是非常高,推荐使用
4.2插入
4.2.1append尾部追加
尾部追加顾名思义就是在列表的尾部增加元素。请看如下代码所示:

没有返回值,往往表示自己改变了,也就是就地修改,它的时间复杂度是O(1),效率非常高,但是如果牵扯到垃圾回收效率就低了,也就是说,列表虽然是容器,是容器就会有容量,如果一直往里面增加元素,假设内存连续空间不够,就会牵扯到垃圾回收。
4.2.2insert在索引前插入
请看如下代码所示,了解其用法
正索引插入

右边界超界相当于尾插

负索引插入

左边界超界相当于头插

insert效率如何呢?
虽然insert定位高效,但是插入数据之后,所有数据需要向后挪动,效率低,规模越大挪动的数据就越多,最差情况,插入到对首,最好情况,就是队尾追加。
4.2.3extend 增加多个元素,放可迭代对象
请看如下代码:

也就相当于:

4.3、删除
4.3.1pop尾部移除
弹出返回值,删除尾部元素
如下代码所示

效率O(1)
4.3.2remove
移除中间元素,如下代码所示

效率一样低下,索引找的快,挪除元素后,其余元素向前挪动。
4.3.3clear
清空列表,直接标记不用了

效率高,但是内存是宝贵的,用这个方法请慎重,好不容易算出来的值,说不要就不要了?
4.4、修改
直接修改就行

五、列表的特性
可变性
可以随时修改增加删除元素
可迭代性,可以使用for循环遍历
切片操作
六、列表的复制
列表的复制有浅复制和深复制
浅拷贝
代码1
浅拷贝通过创建一个新对象,并将其指向原始对象的相同内存地址来创建副本。这意味着新对象和原始对象引用同一块内存区域。如下所示:

copy
代码2


代码三

由此可知浅复制是只有一层的对象复制,其他层都是引用。
深复制
集合内部对象不共享
请看下面一段代码

这是具体分析


274

被折叠的 条评论
为什么被折叠?



