内容正文:
专题七 Python元组、集合
Python程序设计
1
考纲解读
一
1.了解元组的特性
2.掌握元组的索引和切片操作
3.了解元组函数
4.掌握集合的创建
5.了解集合的特性
6.掌握集合的运算
7.掌握集合的函数
知识点梳理-元组的定义
二
定义:元组的元素用逗号隔开,放在圆括号内。元组是不可变对象,元组一经创建其元素便不能被修改。 如:(1,2,3)
注意:当元组中只包含一个元素时,需要在元素后面添加逗号,否则就是整型的数据类型。
>>> a=(1,2,3,4)
>>> type(a)
<class 'tuple'>
>>> b=(1)
>>> type(b)
<class 'int'>
>>> c=(1,)
元组和列表的比较:
1.元组是不可变的数据类型而列表是可变的数据类型
2.都支持索引和切片的操作
3.元组的元素不可修改、删除
知识点梳理-创建元组
二
方法1
tup1 = ()
方法2
tup2 = tuple()
其中的tuple( )函数就是元组的专用函数。可以通过调用tuple( )函数来创建元组
通过调用tuple( )函数还可以将字符串和列表、集合、字典转为元组。
str1="hello"
print(tuple(str1)) # (‘h’,’e’,’l’,’l’,’o’)
lst=[1,2,3,4]
print(tuple(lst)) # (1,2,3,4)
知识点梳理-元组封装与序列拆封
二
1.元组封装
元组封装是指以逗号分隔的多个值自动封装到一个元组中,例如:
>>> a=1,2,3
>>> a
(1, 2, 3)
>>> a=1,
>>> a
(1,)
2.序列拆封
序列拆封是元组封装的逆运算,可以用来将一个封装起来的元组对象自动拆分成若干个基本数据。例如:
>>> x,y,z=(1,2,3)
>>> x
1
>>> y
2
>>> z
3
封装操作只能用于元组对象,而拆分操作不仅可以用于元组对象,还可以用于其他序列对象。
知识点梳理-元组连接和重复
二
1.元组连接
语法结构:元组1+元组2+…
示例:
>>> tup1=(1,2,3)
>>> tup2=(4,5,6)
>>> tup1+tup2
(1, 2, 3, 4, 5, 6)
2.元组重复
语法结构:元组*正整数/正整数*元组
示例:
>>> tup1=(1,2,3)
>>> tup1*2
(1, 2, 3, 1, 2, 3)
>>> 2*tup1
(1, 2, 3, 1, 2, 3)
常考类题:
tup1=(1,2)
tup2=(3,4,5)
print(len(tup1*2+tup2*3)) # 13
知识点梳理-索引取值和切片赋值、元组比较
二
元组是有序序列,因此索引取值和切片赋值的方法和列表的操作一模一样。
元组比较,也是和列表的比较一样的
使用成员运算符in来判断某个值是否存在于元组中
总结:元组和列表的相似度很高,唯一不同的是元组不可变,列表是可变的数据类型。
元组是不可变对象,是不允许修改元组中的元素值,如果试图通过赋值语句修改元组中的元素,将会出现TypeError的错误,同样,是不允许删除元组中的元素的。但是可以使用del语句来删除整个元组。
>>> tup1=(1,2,3)
>>> tup1[1]=20
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'tup1' is not defined
>>> del tup1[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
>>> del tup1
>>> tup1
知识点梳理-元组函数
二
在Python中,元组(tuple)与列表类似,它们同属于有序的序列类型。不同的是元组是不可变对象,元组一经创建,其元素便不能被修改。
tup.count(x) 使用该方法可以返回元素x在元组中出现的次数。例如:
>>> tup1=(1,2,3,4,5,6,1,2)
>>> tup1.count(1)
2
>>> tup1.count(7)
0
tup.index(x[,start,end]) 使用该方法返回元素x在元组中第一次出现的索引值,如果元素x未包含在元组中,则会出现ValueError的错误。例如:
>>> tup1=(1,2,3,4,5,6,1,2)
>>> tup1.index(1)
0
>>> tup1.index(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
知识点梳理-集合的定义和创建
二
集合是一些不重复的无序组合,集合分为可变集合和不可变集合。集合不记录元素的位置,因为对集合不能进行索引和切片等操作。注:我们现在学习的是可变集合
集合的特点:确定性、互异性、无序性
创建空集合,使用集合的内置函数set()来创建
set1 = set()
print(type(set1)) # <class 'set'>
为什么不能使用{ }来创建,我们来看看代码:
set2 = {}
print(type(set2)) # <class 'dict'>
从上面能看出这是字典的数据类型,并不是集合。上面的方法是创建空的字典
知识点梳理-集合的创建
二
使用set()函数将其他类型的数据转为集合。但是注意,其他类型的数据转为集合需要去重。
来看看下面的示例:
>>> st="hello"
>>> set(st)
{'o', 'e', 'l', 'h'}
>>> tup=(1,2,3,1,2)
>>> set(tup)
{1, 2, 3}
>>> st=""
>>> set(st)
set()
对列表的元素去重
>>> lst=[1,2,3,4,5,2,3,5]
>>> nlst=list(set(lst))
>>> nlst
[1, 2, 3, 4, 5]
对字符串的字符去重
>>> st="hello"
>>> "".join(set(st))
'oelh'
知识点梳理-集合的特征
二
集合中的元素可以是不同的数据类型,但是不能是可变的数据类型(列表,字典)因为集合的三大特征(确定性、互异性、无序性)中的确定性决定的。
确定性:指的是集合中的元素是不可变的数据类型,且不可变的数据内部也不能包含可变的数据类型。
>>> set1={(1,2),"hello",1,3,88}
>>> set1
{(1, 2), 1, 3, 'hello', 88}
>>> set1={(1,[2,3]),"hello",1,3,88}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
知识点梳理-集合的特征
二
互异性:指的是集合中的元素不能重复,即便在创建集合的时候里面有重复的元素,集合会自动删除重复的元素。因此集合可以用来剔除序列中重复的元素。但是可能会打乱序列中以前的数据顺序。
>>> set1={1,2,3,4,5,1,2}
>>> set1
{1, 2, 3, 4, 5}
>>> lst=[1,2,3,4,5,6,1,2,7]
>>> nlst=list(set(lst))
>>> nlst
[1, 2, 3, 4, 5, 6, 7]
无序性:指的是集合中的元素不记录元素的位置,因此不能使用索引和切片
>>> set1[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
知识点梳理-集合操作
二
1.set1.add(x) 该函数用于在集合set1中添加元素x,如:
>>> set1={'a','b','c'}
>>> set1.add('d')
>>> set1
{'a', 'c', 'd', 'b’}
2.set1.remove(x) 该函数用于从集合set1中删除元素x,若x不存在于集合set1中,则会出现KeyError的错误。例如:
>>> set1={1,2,3,4,5}
>>> set1.remove(2)
>>> set1
{1, 3, 4, 5}
3.set1.clear( )该函数用于删除集合set1中的所有元素。例如:
>>> set1={1,2,3,4}
>>> set1.clear()
>>> set1
set()
>>> set1.remove(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 6
知识点梳理-集合的运算
二
交集 两个集合共有的元素组成的集合,使用运算符”&”计算两个集合的交集
>>> set1={1,2,3,4,5}
>>> set2={3,4,5,6,7}
>>> set1&set2
{3, 4, 5}
并集 两个集合所有元素的集合,使用运算符”|”计算两个集合的并集
>>> set1={1,2,3,4,5}
>>> set2={3,4,5,6,7}
>>> set1|set2
{1,2,3, 4, 5,6,7}
知识点梳理-集合的运算
二
差集 A-B表示属于集合A但不属于集合B的元素所组成的集合称为集合A和集合B的差集 B-A表示属于集合B但不属于集合A的元素所组成的集合称为集合B和集合A的差集
>>> set1={1,2,3,4,5}
>>> set2={3,4,5,6,7}
>>> set1-set2
{1, 2}
>>> set2-set1
{6, 7}
对称差集 对于集合A和B,由所有属于集合A但不属于集合B,属于集合B但不属于集合A的元素所组成的集合称为集合A和集合B的对称差集,可以使用运算符”^”计算两个集合的对称差集
>>> set1={1,2,3,4,5}
>>> set2={3,4,5,6,7}
>>> set1^set2
{1, 2, 6, 7}
限时练习
三
1.下面代码的运行结果__________
a=9,
print(a)
【答案】(9,)
【解析】将9,封装成元组
2.下面代码的运行结果__________
a,b,c=(2,3,4)
print(a**b//4)
【答案】2
【解析】a,b,c的值分别为2,3,4 a**b的值为8 8//4的取整值为2
限时练习
三
3.下面代码的运行结果__________
st="hello"
print(tuple(st))
【答案】('h', 'e', 'l', 'l', 'o')
【解析】将字符串转为元组
4.下面代码的运行结果__________
st="pyth"
lst=['o','n’]
print(tuple(st)+tuple(lst))
【答案】('p', 'y', 't', 'h', 'o', 'n')
【解析】将st和lst转为元组再进行拼接
限时练习
三
5.下面代码的运行结果__________
tup=(1,2,3,4,5,6,7,8)
print(tup[::3])
【答案】(1, 4, 7)
【解析】步长为3 且从元组的开始切片到结束
6.下面代码的运行结果__________
tup=(1,2,3,4,5,6,7,8)
print(tup[:1:-2])
【答案】(8, 6, 4)
【解析】步长-2表示从右往左,从右侧切片到索引1结束。因此结果为(8, 6, 4)
限时练习
三
7.下面代码的运行结果__________
tup1=(1,2,3)
tup2=(4,5)
print(len(tup1*3+tup2*2))
【答案】13
【解析】tup1*3的长度为9 tup2*2的长度为4 最后长度为13
8.下面代码的运行结果__________
print((2,3,4)>(2,3,3,4))
【答案】True
【解析】左侧元组的索引2位置的元素大于右侧元组索引2位置的元素,因此返回True
限时练习
三
9.下面代码的运行结果__________
st="hello"
print(len(set(st)))
【答案】4
【解析】set()函数将字符串st里面的重复字符去重,set(st)的值为{'e', 'l', 'h', 'o'}因此长度为4
10.下面代码的运行结果__________
set1={1,2,3,4}
set1.add(3)
print(set1)
【答案】{1, 2, 3, 4}
【解析】由于3已经在集合里面了,因此添加进去也会被去重。最后的结果为{1, 2, 3, 4}
限时练习
三
11.下面代码的运行结果__________
set1={1,2,3,1}
set1.remove(1)
print(set1)
【答案】{2, 3}
【解析】set1先把重复的元素去重,再删除元素1。最后的结果为{2, 3}
12.下面代码的运行结果__________
st1="hello"
st2='heha’
print(set(st1)|set(st2))
【答案】{'a', 'e', 'l', 'o', 'h'}
【解析】set(st1)的值为{‘l’, ‘e’, ‘h’, ‘o’} ,set(st2)的值为{'e', 'h', 'a'}两个集合的并集为{'a', 'e', 'l', 'o', 'h'}
归纳总结
四
谢谢观看
23
$$