Python 语言-第四章典型数据结构之列表
4.1 列表 (list)
4.1.1 认识列表
-
为什么需要列表
- 为了更方便对多个数据进行整体操作
-
列表相当于其他语言中的数组
-
存储原理:
-
列表存储的是对象的“引用“,而非对象本身
-
内存示意图
-
4.1.2 列表的特点
- 有序
- 索引映射唯一数据
- 可以储存重复、任意类型数据
- 根据动态分配和回收内存
4.1.3 创建列表
-
使用方括号
[]
创建:-
例如:
lst1 = [1,2,3,5]
-
-
使用函数
list()
创建:-
例如:
lst1 = list([1,4,6])
-
通过这种方法可以将其他可迭代对象类型转换为列表
-
-
可通过乘法运算来创建指定长度的列表并对其中的元素进行初始化。
x=["1"]*10 print(x)
['1', '1', '1', '1', '1', '1', '1', '1', '1', '1']
4.1.4 基本操作
4.1.4.1 查询操作
4.1.4.1.1 获取列表指定元素索引
-
使用
index()
函数通过元素来寻找索引引 -
如果列表中存在多个相同元素,只会返回相同元素的第一个元素的索引
-
例如:
lst1 = [1,2,5,73,7,8,0,2] print("查找元素的索引为:",lst1.index(2))
查找元素的索引为: 1
-
-
如果查询元素不存在于列表,则会出现 ValueError 异常
-
还可以在指定的 start 和 stop 之间查找元素索引
-
例如:
lst1 = [1,2,5,73,7,8,0,2,"Hello",4] print("查找元素的索引为:",lst1.index(2,4,9))
查找元素的索引为: 7
-
4.1.4.1.2 获取列表单个元素
-
使用索引来查找元素
-
语法格式:
列表名[索引]
-
例如:
x=[1,4,56,7] print(x[1])
4
-
-
-
正向索引从 0 到 N-1
-
逆向索引从 -N 到 -1
-
指定的索引不存在,则抛出 IndexError 异常
4.1.4.1.3 获取列表多个元素
-
使用切片来获取多个元素
-
切片是原列表片段的拷贝
-
语法格式:
列表名[[start]:[stop][:step]]
-
step默认为1,默认时可以不写 step
-
start、stop、step 可以省略,但是不可同时省略
-
例如:
lst[1:4] lst[2::] lst[::8]
-
-
4.1.4.1.4 判断元素是否存在于列表
-
使用
in|not in
进行判断 -
语法格式:
元素 in[not in] 列表名
4.1.4.1.5 遍历列表中的元素
-
可以通过while和for循环来实现遍历。通常使用 for 循环
-
语法格式:
for 迭代变量 in 列表名: 语句块
4.1.4.1.6 拆分赋值
-
用于将一个列表赋予多个变量
-
例如:
x,y,z=[1,2,3] print(x,y,z)
1 2 3
-
当进行拆分赋值时,当变量个数少于列表元素个数时,可以在变量名前面添加星号"*",这样会将多个元素赋予相应的变量。
-
例如:
x,*y,z=[1,2,3,4,5] print(x,y,z)
1 [2,3,4,5] 6
-
4.1.4.2 添加操作
-
append()
:在列表的末尾添加一个元素,等价于执行复合赋值语句lst += [x]
-
extend()
:在列表末尾至少添加一个元素-
用途:append() 函数在添加元素时,时将元素视为"一个"元素进行添加的,可能会出现列表中还有列表的情况。这时候就可以使用 extend() 函数
-
例如:
lst1 = [1,2,3] lst2 = [4,5] lst1.append(lst2) print(lst1)
-
[1, 2, 3, [4, 5]]
-
-
insert()
:在列表任意一个位置添加一个元素-
例如:在索引2的位置添加一个元素7
lst1 = [1,2,3] lst1.insert(2,7) print(lst1)
[1, 2, 7, 3]
-
如果插入位置大于列表长度,则将元素 x 插入到列表末尾
-
-
切片添加:在列表任意位置添加至少一个元素
4.1.4.3 删除操作
-
remove()
:一次删除一个元素-
重复数据只删除第一个
-
例如:
lst1 = [1,2,3,2] lst1.remove(2) print(lst1)
[1, 3, 2]
-
-
元素不存在时,抛出 ValueError 异常
-
-
pop()
:使用索引来删除元素 -
切片删除:一次至少删除一个元素
-
实质是将原列表拷贝,再进行切片操作
-
要想在"原列表"进行操作,则可以使用空列表的方式
-
例如:
lst1 = [1,2,3,4,5,6,7] lst1[1:3] = [] print(lst1)
[1, 4, 5, 6, 7]
-
-
-
clear()
:清除列表中所有元素,使其变为空列表 -
del
:清除列表对象-
例如:
x=[1,2,3,4,5,6] del x[3] print(x)
[1,2,3,5,6]
-
4.1.4.4 修改操作
-
为指定的索引的元素赋予新值
-
例如:
lst1 = [1,2,3] lst1[2] = 10 print(lst1)
[1, 2, 10]
-
内存示意图:
-
-
-
为指定的切片赋予一个新值
-
例如:
x=[1,2,3,4,5,6] x[1:4]=[200,300,400] print(x)
[1, 200, 300, 400, 5, 6]
-
4.1.5 排序操作
-
调用
sort()
方法:-
sort() 是列表对象的方法,不会产生新对象
-
例如:
lst1 = [10,5,40,30] lst1.sort() print(lst1)
[5, 10, 30, 40]
-
默认为升序操作,可以设置参数
reverse = True
,进行降序排序
-
-
调用
sorted()
方法:- sorted() 是 python 内置的方法,会产生新对象,进行操作,原列表不发生改变
4.1.6 列表生成式
-
列表解析是python迭代机制的一种应用
-
通过列表解析可以根据已有的列表高效地创建新的列表,因此通常用于创建新的列表
-
列表解析有两种语法格式:
[表示列表元素的表达式 for 自定义变量 in 可迭代对象]
或者
[表示列表元素的表达式 for 自定义变量 in 可迭代对象 if 条件表达式 ]
- ”表示列表元素的表达式 “中通常包含”自定义变量“
-
例如:列出1~10所有数字的平方
x=[i*i for i in range(1,11)] print(x)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.1.7 其他常用函数
-
内置函数:不止可以应用于列表,还可以应用于其他可迭代类型,例如字符串,元组等
-
函数 描述 all(seq) 如果序列 seq 中所有元素为 Ture 或序列自身为空,则返回该函数 Ture,否则返回 False any(seq) 如果序列 seq 中任一元素为 Ture 则返回函数 Ture,
如果序列中 seq 中所有元素为 False 或自身序列为空,则该函数返回Falselen(seq) 返回seq序列长度 sum(iterable[,start]) 求和,start 用以指定相加的参数,默认为0 isinstance(object,classinfo) 判断一个对象是否是一个已知的类型,类似 type()。
object:对象
classinfo:可以是直接或间接类名、基本类型或者由它们组成的元组。
返回值的结果是布尔值。如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
-
-
列表对象方法:只适用于列表对象的成员方法
-
函数 描述 lst.count(x) 返回元素 x 在列表 lst 出现的次数 lst.serversed(x) 反转列表 lst 中所有元素的位置
-