【python学习笔记】08 列表最全总结

本系列为自己学习Python的笔记,如有误,欢迎大家指正

列表特点

序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一共整数序列[10,20,30,40]可以这样示意表示:
在这里插入图片描述

由于python3中一切皆对象,在内存中实际上是按照下列方式存储的:

a=[10,20,30,40]
在这里插入图片描述

从图中,可以看出序列中存储的是整数对象的地址,而不是整数对象的值。python中常用的序列结构有:字符串 列表 元祖 字典 集合。

列表简介

列表:用于存储任意数目、任意类型的数据集合

列表内置可变序列,是包含多个元素的有序连续的内存空间。列表定义的标准语法格式:

a=[10,20,30,40]

其中,10 20 30 40这些称为:列表a的元素

列表中的元素可以各不相同,可以是任意类型。比如:

a=[10,20,‘abc’,True]

扫描二维码关注公众号,回复: 12181955 查看本文章

列表对象的常用方法:

方法 要点 描述
list.append(x) 增加元素 将元素x增加到列表list尾部
list.extend(aLIst) 增加元素 将列表aLIst所有元素都增加到列表list尾部
list.insert(index,x) 增加元素 在列表list指定位置index处插入元素x
list.remove(x) 删除元素 在列表list中删除首次出现的指定元素x
list.pop(x) 删除元素 删除并返回列表list指定位置index处的元素
list.pop([index]) 删除元素 删除并返回列表list指定位置index处的元素,默认是最后一个元素
list.clear() 删除所有元素 删除列表所有元素,并不是删除列表对象
list.index(x) 访问元素 返回第一个x的索引位置,若不存在x元素则抛出异常
list.count(x) 计数 返回指定元素x在列表list中出现的次数
len(list) 列表长度 返回列表中包含元素的个数
list.reverse() 翻转列表 所有元素原地翻转
list.sort() 排序 所有元素原地排序
list.copy() 浅拷贝 返回列表对象的浅拷贝

Python的列表大小可变,根据需要随时增加或缩小

字符串和列表都是序列类型,一个字符串是一个字符序列,一个列表是任何元素的序列。

列表的创建

基本语法[]的创建

a = [10,20,'slp','sx']
a=[] #创建一个空的列表对象

list()创建

使用list()可以将任何可迭代的数据转化为列表

a =list()# 创建一个空的列表对象
a = list(range(10))
a = list('slp,sx')

range()创建整数列表

range()可以帮助我们非常方便的创建整数列表:range([start],end,[step])

  • start:可选 起始数字 默认0
  • end:必选 结尾数字
  • step:可选 表示步长 默认为1

python3中range()返回的是一个range对象,而不是列表,我们需要通过list方法将其转换成列表对象。

推导式生成列表

使用列表推导式可以非常方便的创建数据,在开发中经常使用。但是,由于涉及到for循环和if语句

a = [x*2 for x in range(5)]  #循环创建多个元素
a = [x*2 for x in range(100) if x%9==0] #通过if过滤元素

列表元素的增加和删除

当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及列表元素的大量移动,效率较低。除非毕业,我们一般只在列表的尾部添加元素,这会大大特高列表的操作效率。

append()方法

原地修改列表对象,是真正的列表尾部添加新的元素,速度最快。推荐使用

a = [20,40]
a.append(80)

+运算符操作

并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。

a = [20,40]
id(a) #46016027
a = a+[50]
id(a)# 46015432

由上可知,a的地址发生了变化,也就是创建了新的列表对象。

extend()方法

将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象

a = [20,40]
a.extend([50,60])

insert()插入元素

使用insert()方法可以将制定的元素插入到列表对象的任意制定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。类似这种发生移动的函数还有remove() pop() del() 他们在删除非尾部元素时也会发生操作位置后面元素的移动

乘法扩展

使用乘法扩展列表,生成一个新列表,新列表元素是原列表元素的多次重复。

适用于乘法操作的还有:字符串 元祖。

del删除

删除列表指定位置的元素 (底层原理还是数组的拷贝)

a = [10,20,30]
del a[1] #删除第一个元素,下标是从0开始的

pop()方法

pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素

a  = [10,20,30]
a.pop() #30

remove()

删除首次出现的指定元素,若不存在该元素抛出异常

a=[10,20,10,30]
a.remove(10) #[20,10,30]

列表元素的访问和计数

通过索引直接访问元素

我们可以通过索引直接访问元素,索引的区间在[0,列表长度-1]这个范围,超过这个范围则会抛出异常

index()获得指定元素在列表中首次出现的索引

index()可以获取指定元素首次出现的索引位置,语法是index(value,[start,[end]])其中start和end指定了搜索的范围

count()获得指定元素在列表中出现的次数

count()可以返回指定元素在列表中出现的次数

a = [10,20,10,30]
a.count(10) #2

len()返回列表长度

len()返回列表长度,即元素个数

成员资格判断

判断列表中是否存在指定的元素,我们可以使用count()方法,返回0则表示不存在,大于0则表示存在,但是一般我们会使用更加简洁的in关键字来判断,直接返回True或False

a = [10,20,40]
10 in a #True

切片操作

切片是python序列及其重要的操作,适用于列表、元祖、字符串等等

切片的格式如下:

[起始偏移量 start 终止偏移量 end [:步长 step]]

典型操作如下(参数为正的情况):

操作和说明 示例 结果
[:] 提取整个列表 [10,20,30] [:] [10,20,30]
[start:从start索引开始到结尾] [10,20,30] [1:] [20,30]
[:end] 从头开始到end-1 [10,20,30] [:2] [10,20]
[start:end]从start开始到end-1 [10,20,30,40] [1:3] [20,30]
[start​ : end: step] 从start开始提取到end-1 步长是step [10,20,30,40,50,60,60] [1:6:2] [20,40,60]

其他操作(三个量为负数):

示例 说明 结果
[10,20,30,40,50,60,70] [-3:] 倒数三个 [50,60,70]
[10,20,30,40,50,60,70] [-5:-3] 倒数第五个到倒数第三个(包头不包尾) [30,40]
[10,20,30,40,50,60,70] [::-1] 步长为负,从右到左反向提取 [70,60,50,40,30,20,10]

切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错,起始小于0会当做0,终止大于长度-1会当成-1

列表的遍历

for i in listObj:
    doSomething()

复制列表所有的元素到新列表对象

如下代码实现列表元素的复制了吗?

list1 = [30,40,50]

list2 = list1

只是将list2也指向了列表对象,也就是list2和list1持有地址值是相同的。列表元素本身并没有复制。

列表排序

修改原列表,不建新列表的排序

a = [20,10,30,40]
id(a)
a.sort() #默认是升序
a.sort(reerse=True) #降序排列
random.shuffle(a) #打乱顺序

建新列表的排序

我们也可以通过==内置函数sorted()==进行排序,这个方法返回新列表

a = [20,10,30,40]
id(a)
a = sorted(a) # 内置函数 会生成新的列表,所以下方id函数的返回值会变掉
id(a)

reversed()返回迭代器

内置念书reversed()也支持进行逆序排列,与列表对象reversed()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。

a = [20,10,30,40]
c = reversed(a)
list(c) #C是一个迭代器对象,需要转换一下 迭代器只能用一次 转换一次之后就不能再用了

列表内置其他函数相关汇总

max和min

返回列表中最大和最小值

sum

对数值列表的所有元素进行求和操作,对非数值列表运算会报错

多维列表

二维列表

一维列表可以帮助我们存储一维。线性的数据

二维列表可以帮助我们存储二维、表格的数据

a = [
    ['高小一',18,30000,'北京'],
    ['高小二',19,40000,'上海'],
    ['高小五',20,1000,'深圳']
]

内存结构图:
在这里插入图片描述

微信搜一搜【梓莘】或扫描下方二维码交个朋友共同进步。文章持续更新中。目前在整理python百战学习笔记,期待后续更多的更新哦。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51656605/article/details/112648028
今日推荐