列表详解---python

序言:在python中有四大数据结构:列表、元组、字典、集合,今天先重点讲解的是列表。

首先以一张思维导图来了解一下今天要学的内容

ef88e087903b457cbfe6c5b1ba2e3a92.png

一、列表的定义

一种可变序列类型,可以存储不同类型的元素,内部数据有序排列,结构富有弹性,可变。

二、列表的创建

以一段代码来示例:

ea79518572bb42d7afa7630e8fd230f4.png

三、列表常用的方法

3.1、sort

就地修改,默认升序排序,下面以一段代码来了解sort的用法。

82e9c2cbcf47476b942f13af299399d5.png

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

e4bd0a4470764b058a5c9c647ba2974a.png

key=str

4537af83a7a84a98868983688ae0b886.png

将元素转换成字符串进行比较,决定先后次序,但不影响输出。

注意列表不能对包含不同类型的元素进行排序,如混和列表中及包含数字又包含字符串。

3.2、reverse

反转列表中的元素顺序。如下代码所示

1f307eedf6b049d9b1ac92b8ea0bfd49.png

它是直接修改原列表,没有返回值。

那么它的效率如何呢?

reverse的时间复杂度是O(n),他需要遍历列表中大约一半的元素进行翻转操作,规模越大,耗费时长越长。这里不推荐使用,如果你想把列表颠倒过来,可以使用负索引。如:

333584f44a7a4eea95208f254dfa96cd.png

3.3、count

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

01f788402dda45b4941751d57cc628af.png

9在l1列表中出现了2次所以打印2。

它的效率如何呢?

极差,时间复杂度是O(n),随数据规模的增大而性能下降,耗时增长,建议是能不用则不用

四、列表的基本操作

4.1访问

4.1.1index

输入想访问的值,返回从左到右搜索到的第一个元素索引,如下代码所示

23ce2f8953294f39981a4e6c6b76537c.png

index效率如何呢?index需要遍历元素,效率极差

4.1.2索引访问

请看如下代码所示:

6a4f256c62fb449aa031c1c239095093.png

999bca695fae4bedb4cca0a4eee11cc5.png

它的效率如何呢?答案是非常高,推荐使用

4.2插入

4.2.1append尾部追加

尾部追加顾名思义就是在列表的尾部增加元素。请看如下代码所示:

1046b6a6c96342129ebc892a4c5d900d.png

没有返回值,往往表示自己改变了,也就是就地修改,它的时间复杂度是O(1),效率非常高,但是如果牵扯到垃圾回收效率就低了,也就是说,列表虽然是容器,是容器就会有容量,如果一直往里面增加元素,假设内存连续空间不够,就会牵扯到垃圾回收。

4.2.2insert在索引前插入

请看如下代码所示,了解其用法

正索引插入

86b270e6535e49e9befbb5d3fdb8ffab.png

右边界超界相当于尾插

1c99e5ede2b94cf3ae8e848b45193394.png

负索引插入

f17ad60bd8f0435584a43d95132e2f79.png

左边界超界相当于头插

d9fe5b51ad524f0d97da0ece4632cfb1.png

insert效率如何呢?

虽然insert定位高效,但是插入数据之后,所有数据需要向后挪动,效率低,规模越大挪动的数据就越多,最差情况,插入到对首,最好情况,就是队尾追加。

4.2.3extend 增加多个元素,放可迭代对象

请看如下代码:

8a7aea36a1b540f1af7aead0e19f4a47.png

也就相当于:

f7ae99b8f55349ab80345c5b86e0ce78.png

4.3、删除

4.3.1pop尾部移除

弹出返回值,删除尾部元素

如下代码所示

10dff327b6f04f85907c658d03d2d3ef.png

效率O(1)

4.3.2remove

移除中间元素,如下代码所示

06382c051e224d2d887a43740bf6b678.png

效率一样低下,索引找的快,挪除元素后,其余元素向前挪动。

4.3.3clear

清空列表,直接标记不用了

111bb61dea8b41cfb30fa568e634cb4e.png

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

4.4、修改

直接修改就行

92f0a52a84594e99a244ed2a2305f36f.png

五、列表的特性

可变性

可以随时修改增加删除元素

可迭代性,可以使用for循环遍历

切片操作

六、列表的复制

列表的复制有浅复制和深复制

浅拷贝

代码1

2a7755a17ff54bf3bbabb424298e7278.png浅拷贝通过创建一个新对象,并将其指向原始对象的相同内存地址来创建副本。这意味着新对象和原始对象引用同一块内存区域。如下所示:

b13790c733eb42ba886af7631bfc27fa.png

copy

代码2

1e48b99c5b424df8a2e43bfec56612ef.png

984e2c986f4b4d01808516884d2a8d14.png

代码三

5029e3857f5449a9956ab8b3710d2c9e.png

由此可知浅复制是只有一层的对象复制,其他层都是引用。

深复制

集合内部对象不共享

请看下面一段代码

762d070682b84417be005d8dc9ca93f5.png

这是具体分析

36b9626f2abb43ddb77d043e12f2ae68.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>