安迪Python
2022/10/06阅读:21主题:默认主题
32. 序列及序列的成员运算
32. 序列及序列的成员运算
1. 序列概述
序列是一种可迭代的、元素有序的容器类型数据。
【可迭代对象】
可迭代对象是Python语言中较新的概念,它实际保存的是序列或者可以一次产生一个结果的对象。(仅做了解,不需要掌握)
【常见的可迭代对象】
-
字符串
-
列表
-
元组
-
字典
-
集合
-
range函数返回结果
【什么是可迭代】
可迭代我们可以简单理解为能够使用for循环进行取值操作,或者说是可以使用for循环遍历。
【备注】for循环后面会讲。
2. 常见的序列类型
-
字符串(str):按照一定的顺序组合在一起的字符。字符串是有顺序的,例如:“金融科技”和“科技金融”就是2个不同的字符串。
-
列表(list):包含0个或多个不同类型元素的
可变
序列类型,用方括号
将元素括在一起,元素是有顺序的,可进行修改
的。例如:[1,2]和[2,1]就是2个不同的列表。 -
元组(tuple):包含0个或多个不同类型元素的
不可变
序列类型,用圆括号
将元素括在一起,元素是有顺序的,不可以进行修改
的。例如:(1, 2)和(2, 1)就是2个不同的元组。
【字符串的有序性】
# 新建2个字符串
str_1 = "金融科技"
str_2 = "科技金融"
# 用==判断两个字符串是否相等
print(str_1 == str_2)
【终端输出】
False
返回布尔值False,表示上述2个字符串不相等。
【知识回顾】
一个等于号=
称为赋值运算符,作用是给变量赋值。
两个等于号==
称为比较运算符,作用是判断==
左右两边的值是否相等。
相等返回布尔值True。
不相等返回布尔值False。
【列表元素的有序性】
# 新建2个列表
list_1 = [1, 2]
list_2 = [2, 1]
# 用==判断两个列表是否相等
print(list_1 == list_2)
【终端输出】
False
返回布尔值False,表示上述2个列表包含的元素相同,但顺序不同,即为不同的列表。
【元组元素的有序性】
# 新建2个元组
tuple_1 = (1, 2)
tuple_2 = (2, 1)
# 用==判断两个元组是否相等
print(tuple_1 == tuple_2)
【终端输出】
False
返回布尔值False,表示上述2个元组包含的元素相同,但顺序不同,即为不同的元组。
3. 序列类型数据的操作
所有序列类型的数据都可以进行一些特定的操作,例如:
-
索引
-
切片
-
连接(加和乘)
-
成员测试
-
统计序列的长度
-
计算元素出现的次数
4. 序列的索引操作
温馨提示⚠️:索引通常从0开始编号!
⚠️正索引从左往右开始编号,编号从0
开始!
⚠️负索引从右往左开始编号,编号从-1
开始!

【备注】上述图片来自关东升的《看漫画学Python》。
5. 序列的切片操作
【语法】
序列[star:end:step]
序列[开始字符:结束字符:步长]
-
参数start:表示要取的第1元素的索引(包括该元素),如果不指定,则默认为
0
。 -
参数end:表示要取的最后1个元素的索引(不包括该元素),如果不指定,则默认为列表的长度。
-
参数step:表示切片的步长。如果省略,则默认为1,当省略该步长时,最后一个冒号也可以省略。
【温馨提示】切片取值时包括开始字符,不包括结束字符,简单记忆为含前不含后
。
6. 序列的连接(序列的加和乘)
加+
和乘*
运算符也可以用于序列中的元素。
加+
运算符可以将多个序列连接起来。
乘*
运算符可以将序列重复多次。

【加法操作】
# 新建2个字符串
str_1 = "Hello"
str_2 = "World"
# 用+连接两个字符串
print(str_1+str_2)
【终端输出】
HelloWorld
# 新建3个列表
list_1 = [1, 2]
list_2 = [3, 4]
list_3 = [4, 5]
# 用+连接多个列表
print("列表1+2+3:", list_1 + list_2 +list_3)
# 用+连接多个列表
print("列表3+2+1:", list_3 + list_2 +list_1)
【终端输出】
列表1+2+3: [1, 2, 3, 4, 4, 5]
列表3+2+1: [4, 5, 3, 4, 1, 2]
注意观察输出结果,都是列表相加,但连接的顺序不同,输出结果也不同。
【乘法操作】
# 新建1个字符串
str_1 = "Hello"
# 用*将字符串重复2次
print(str_1*2)
【终端输出】
HelloHello
# 新建1个元组
tuple_1 = ("张三",)
# 用*将元组重复5次
print(tuple_1 * 5)
# 查看数据类型
print(type((tuple_1 * 5)))
【终端输出】
('张三', '张三', '张三', '张三', '张三')
<class 'tuple'>
【温馨提示】注意元组只有1个元素时,该元素后面必须加一个英文逗号,即字符串"张三"
后面有一个英文逗号,
。
7. in 和not in 成员测试
【语法】
-
要判断的内容 -
成员运算符in或not in -
判断序列

运算符in可以判断某个元素是否在序列中,如果元素在
序列中,in表达式返回布尔值True,否则返回布尔值False。
运算符not in可以判断某个元素是否在序列中,如果元素不在
序列中,not in表达式返回布尔值True,否则返回布尔值False。
# 新建一个列表,存储班级学生名字
name_list = ["张三","李四","王五","赵六","刘一","陈二","孙七","周八"]
# 判断班里有没有一个叫赵六的人
# in表示有
print("赵六" in name_list)
# not in表示没有
print("赵六" not in name_list)
【终端输出】
True
False
in 运算符返回的布尔值是True,表示班里有一个叫赵六的人。 not in 运算符返回的布尔值是False,表示班里有一个叫赵六的人。
# 新建一个列表,存储班级学生名字
name_list = ["张三","李四","王五","赵六","刘一","陈二","孙七","周八"]
# 判断班里有没有一个叫周里的人
# in表示有
print("周里" in name_list)
# not in表示没有
print("周里" not in name_list)
【终端输出】
False
True
in 运算符返回的布尔值是False,表示班里没有一个叫周里的人。 not in 运算符返回的布尔值是True,表示班里没有一个叫周里的人。
【单双引号不影响判断结果】
# 新建一个列表,存储班级学生名字
name_list = ["张三","李四","王五","赵六","刘一","陈二","孙七","周八"]
# 判断班里有没有一个叫赵六的人
print('赵六' in name_list)
【终端输出】
True
列表里的"张三"
用的是双引号,成员运算里的'张三'
用的是单引号,这里的单双引号不影响最终的判断结果。
8. 总结

【序列类型比较】

9. 课后练习
【1.单选题】
关于列表和元组,表示错误的是:
A.列表和元组都属于序列。
B.列表用中括号 [ ] 表示,元组用 ( )。
C.对元组和列表都可以进行索引取值,常见格式为 list[索引]
, tuple[索引]
。
D.对元组和列表都可以进行元素的添加,需要用到 append( )。
【正确答案D】元组是不可以进行元素的添加及修改的。
【2.代码题】
用索引取值的方式,输出 stock_info 列表内 stock_name 元组中的 保利地产
。
# 圆括号新建1个元组,存储股票名称
stock_name = ('浦发银行', '中兴通讯', '保利地产')
# 方括号新建一个列表,存储股票信息
stock_info = [stock_name, '开盘价', '收盘价']
# 对 stock_info 列表进行索引取值
# 先取出stock_name,再从 stock_name 中取出 `保利地产`
print(stock_info[0][2])
【终端输出】
保利地产
stock [stɒk]:股票,库存。
【3.代码题】
向上述stock_info列表中增加最高价
,最低价
2个元素。
stock_name = ('浦发银行', '中兴通讯', '保利地产')
stock_info = [stock_name, '开盘价', '收盘价']
# 用 append() 给列表 stock_info 添加元素`最高价`
stock_info .append('最高价')
# 用 append() 给列表 stock_info 添加元素`最低价`
stock_info .append('最低价')
# 输出列表验证结果
print(stock_info)
【终端输出】
[('浦发银行', '中兴通讯', '保利地产'), '开盘价', '收盘价', '最高价', '最低价']
【4.代码题】
把stock_name列表里的浦发银行
替换成工商银行
。
输出stock_name列表验证结果。
stock_name = ['浦发银行', '中兴通讯', '保利地产']
stock_name[0] = '工商银行'
print(stock_name)
【终端输出】
['工商银行', '中兴通讯', '保利地产']
作者介绍