第五章:Python基本数据结构——列表
序列是 Python 中最基本的数据结构。
序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。
Python 有 6 个序列的内置类型,但最常见的是列表和元组。
列表都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
一、列表的创建
-
什么是列表
- 序列是 Python 中最基本的数据结构。
-
为什么需要列表
- 变量可以存储一个元素,而列表是一个“大容器”可以存储N多个元素,程序 可以方便的对这些数据进行整体操作
-
列表相当于其他语言中的数组
-
列表的特点
- 列表元素按顺序有序排列
- 索引映射唯一一个数据
- 列表可以存储重复数据
- 任意数据类型混存
- 根据需要动态分配和回收内存
-
列表示意图
- 正向索引
- 反向索引
-
列表创建
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可
- 使用中括号
- 调用内置函数list()
-
代码演示
list = ["hello", "Python", "World"]
print(id(list))
print(type(list))
print(list)
list2=list(["hello",87,"YWHh"])
print(list2)
二、列表的查询操作
2.1 获取列表中指定元素的索引
- 知道列表中存在N个相同元素,只返回相同元素中的第一个元素
- 如果查询的元素在列表中不存在,则会抛出ValueError
- 还可以在指定的start和stop之间进行查询
lst = ["hello", "world", 98, "hello"]
# 如果列表中有相同元素,只返回列表中的第一个元素
print(lst.index("hello"))
# print(lst.index("1111")) 元素不存在
# 指定范围查找
print(lst.index("hello", 1, 4))
2.2 获取列表中的单个元素
- 正向索引从0到N-1
- 逆向索引从-N到-1
- 指定索引不存在,抛出IndexError
lst = ["hello", "world", 98, "hello"]
# 正向索引:获取索引为2的元素
print(lst[2])
# 逆向索引:获取索引为-2的元素
print(lst[-2])
# 索引不存在
# print(lst[-99])
2.3 获取列表中的多个元素
- 语法格式
列表名[start : stop : step ]
- 切片操作
切片操作 | 写法 | 解释 |
---|---|---|
切片的结果 | 原列表片段的拷贝 | |
切片的范围 | [ start , stop ] | 左闭右开 |
步长step默认为1 | [ start : stop ]或者[ start : stop : ] | |
step为正数时,从start开始往后切 | [ : stop : step] | 切片的第一个元素默认时列表的第一个元素 |
[ start : : step] | 切片的最后一个元素默认时列表的最后一个元素 | |
step为负数时,从start开始往前切 | [ : stop : step] | 切片的第一个元素默认时列表的最后一个元素 |
[ start : : step] | 切片的最后一个元素默认时列表的第一个元素 |
- 代码演示
# 切片操作
lst = [10, 20, 30, 40, 50, 60, 70, 80]
# 打印输出:start=1,stop=6,step=1,产生新列表
print(lst[1:6:1])
print("原列表",id(lst))
print("切列表",id(lst[1:6:1]))
# 默认步长为1
print(lst[1:6])
print(lst[1:6:])
# 正向切片
print(lst[:6:2])
print(lst[1::2])
# 逆向切片
lst = [10, 20, 30, 40, 50, 60, 70, 80]
print(lst[::-1])
print(lst[6:1:-1])
print(lst[:1:-1])
print(lst[6::-1])
2.4 判断指定元素在列表中是否存在
- 语法格式
元素 in 列表名
元素 not in 列表名
- 代码演示
lst = [10, 20, "Python", "Hello"]
print(10 in lst)
print(100 in lst)
print("Hello" in lst)
print("java" in lst)
2.5 列表元素的遍历
- 语法格式
for 迭代变量 in 列表名 :
操作
- 代码演示
lst = [10, 20, "Python", "Hello"]
# 将列表元素依次输出
for i in lst:
print(i)
三、列表元素的增加操作
- 增加操作方法
方法/其他 | 操作描述 |
---|---|
append() | 在列表的末尾添加一个元素,不生产新的对象 |
extend() | 在列表的末尾至少添加一个元素 |
insert() | 在列表中的任意位置添加一个元素 |
切片 | 在列表中的任意位置添加至少一个元素 |
- 代码演示
# append():向列表的末尾添加一个元素—最常用
lst = [10, 20, 30]
print("添加元素之前:", id(lst), lst)
lst.append(100)
print("添加元素之后:", id(lst), lst)
lst2 = ["hello", "world"]
# 将lst2作为一个元素添加到列表的末尾
lst.append(lst2)
print(lst)
# 将lst2元素依次添加到列表末尾
lst.extend(lst2)
print(lst)
# 在任意位置上添加一个元素
lst.insert(1, 90)
print(lst)
lst3 = [30, 40, "hello", "python"]
# 切片:在任意位置上添加N多个元素
lst[1::]=lst3
print(lst)
四、列表元素的删除操作
- 增加操作方法
方法/其他 | 操作描述 |
---|---|
remove() | 从列表中移除一个元素,如果有重复元素,只移除第一个;列表元素不存在,ValueError抛出异常 |
pop() | 根据索引移除元素;若索引不存在,则抛出IndexError异常 |
切片 | 删除至少一个元素,将会产生一个新的列表对象 |
clear() | 清空列表 |
del | 删除列表 |
- 代码演示
lst = [10, 20, 30, 40, 50, 60, 30]
print("原列表:", lst)
# remove():从列表中移除一个元素,如果有重复元素,只移除第一个
lst.remove(30)
print("原列表:", lst)
# 列表元素不存在,ValueError抛出异常
# lst.remove(100)
# pop():根据索引删除元素
lst.pop(2)
print(lst)
# 如果指定的索引位置不存在,将抛出IndexError异常
# lst.pop(50)
# 不写参数,会将列表中的最后一个元素删除
lst.pop()
print(lst)
# 切片:删除至少一个元素,将会产生一个新的列表对象
new_list = lst[1:3]
print("原列表:", id(lst), lst)
print("新列表:", id(new_list), new_list)
# 不产生新的列表对象,而是删除原列表中的内容
lst[1:3] = []
print(lst)
# clear():清除列表中的所有元素
lst.clear()
print(lst)
# del语句:删除列表
del lst
五、列表元素的修改操作
- 为指定索引的元素赋予一个新值
- 为指定的切片赋予一个新值
- 代码演示
list = [10, 20, 30, 40]
# 一次修改一个值
list[2] = 100
print(list) # [10, 20, 100, 40]
# 切片修改
list[1:3:] = [22, 33]
print(list)
六、列表元素的排序操作
- 排序操作方法
方法/其他 | 操作描述 |
---|---|
sort() | 调用sort()方法,列表中的所有元素默认按照从小到大的顺序排序, 可以通过指定 reverse=True,进行降序排序,对原列表操作,不产生新的列表对象 |
sorted() | 调用内置函数sorted(), 可以通过指定 reserve=True,进行降序排序,原列表不发生改变,产生新的列表对象 |
- 代码演示
lst = [20, 40, 10, 98, 54]
print('排序前列表', lst) # 排序前列表 [20, 40, 10, 98, 54]
# 开始排序,调用列表对象的sort方法,默认是升序
lst.sort()
print('排序后列表', lst) # 排序后列表 [10, 20, 40, 54, 98]
lst.sort(reverse=True)
print('新排序列表', lst) # 新排序列表 [98, 54, 40, 20, 10]
lst.sort(reverse=False)
print('新排序列表', lst) # 新排序列表 [10, 20, 40, 54, 98]
# 使用内置函数sorted()对列表进行排序,将产生一个新的列表对象
lst2 = sorted(lst)
print(lst2) # [10, 20, 40, 54, 98]
lst2 = sorted(lst, reverse=True)
print(lst2) # [98, 54, 40, 20, 10]
七、列表生成式
列表生成式,简称“生成列表的公式“
- 语法结构
[ 表示列表元素的表达式 for 自定义变量 in 可迭代对象 ]
[ i*i for i in range(1,10) ]
- 代码演示
lst = [i for i in range(1, 10)]
print(lst)
lst2 = [i * i for i in range(1, 10)]
print(lst2)