第六课、python中非可变类型的数据集合
一、 课程介绍
课时介绍
- 元祖简单介绍
- 元组与序列基本操作
- 集合的简单介绍
- 集合的基本操作
课程目标
- 理解元组与列表的差别
- 了解序列及其常用类型
- 掌握集合的特性与常用函数
二、元组与序列基本操作(重要的一章)
2-1 元组的读写操作
元组(Tuple)
- 元组(Tuple)是“不可变”的列表(List)
- 元组使用小括号,列表使用方括号
- tup1=('physics','chemistry',1997,2000)
元组的读与写
- 元组的读取方式与列表相同
- 元组的元素在创建后不允许修改
- 元祖允许使用“元组运算符”来创建新元祖
- (5,6,7)+(8,9,10)=(5,6,7,8,9,10)
- (‘see’,‘you’)*2=('see','you','see','you')
1 # 元组的使用 2 # 创建 3 t = ('a', 'b', 'c', 1, 2, 3) 4 print(t) 5 print(type(t)) 6 # 获取数据,在获取数据时与列表完全相同 7 print(t[5]) # 正序索引,获取第6个元素 8 print(t[-1]) # 倒序索引 9 print(t[1:4]) # 范围取值 10 print('b' in t) # 成员运算符 11 # 元祖在创建后内容不可变 12 # t[0] = 2 13 # 写入数据的函数同样不被支持 14 # t.insert('f') 15 # 如果原组内持有列表,那么列表的内容是允许被修改的 16 t2 = (['张三', 38, 5000], ['李四', 28, 2000]) 17 item = t2[0] 18 print(item) 19 item[1]=40 20 print(t2) 21 # t2.pop(0) 22 # 元组运算符 23 # 元组运算符同样适用于列表 24 t3 = (1, 2, 3)+(4, 5, 6) 25 print(t3) 26 t4 = ('see', 'you')*2 27 print(t4) 28 # 如果元组只有一个元素时,必须在这个元素后增加逗号,说明这是一个元组 29 t5=(10,)*5 30 print(t5)
2-2 元组与列表的区别
列表与元祖的区别与应用场景
列表 | 元组 |
内容允许扩展 | 内容不可变 |
内存存储动态变化 | 创建后固定不变 |
效率较低 | 效率最高 |
运行时数据需要变更时使用 | 用于保存稳定不变的数据 |
保存天气数据、股市数据 | 保存国家名、元素周期表 |
2-3 序列Range的介绍与使用(学好range,提高编程效率)
认识”序列“
- 序列(Sequence)是指“有序”的队列
- 序列中的元素顺序按添加顺序排列
- 序列中的数据通过“索引”进行获取
序列包含常用数据结构
- 字符串(Str)
- 列表(List)
- 元组(Tuple)
- 数字序列(Range)
数字序列(Range)
- range用于表示数字序列,内容不可变
- 数字序列使用range()函数创建
- 语法:r=range(0,100)#产生0-99数字序列
1 # 创建数字序列 2 r1 = range(10, 20) # 10到19的整数(左闭右开) 3 print(r1) 4 print(type(r1)) 5 print(r1[3:5]) 6 7 # 增加步长 8 r2 = range(10, 20, 2) 9 print(r2) # 10,12,14,16,18 10 print(r2[4]) 11 print(r2[0:2]) 12 # r2[4] = 20 13 14 # 成员运算符in 15 print(12 in range(10, 20)) 16 print(r2) # 10,12,14,16,18 17 print(r2[4]) 18 print(r2[0:2])
2-4 数字序列经典案例
数字序列经典案例
- 通过range遍历其他序列
- 科学运算(质数,斐波那契数列...)
1 # 利用range遍历其他序列 2 c = "abcdefg" 3 for i in range(0, len(c)): 4 letter = c[i] 5 print(letter)
1 # 斐波那契数列 2 # 1,1,2,3,5,8,13,... 3 result = [] 4 for i in range(0,50): 5 if i == 0 or i ==1: 6 result.append(1) 7 else: 8 result.append(result[i-2] + result[i-1]) 9 print(result)
1 # 判断质数 2 l = 776351721 3 is_prime = True 4 for i in range(2, l): 5 if l % i == 0: 6 is_prime = False 7 break 8 if is_prime == True: 9 print("{0}是质数".format(l)) 10 else: 11 print("{0}不是质数".format(l))
2-5 序列类型的互相转换
序列类型的互相转换
- list() - 转换为列表
- tuple() - 转换为元组
- join()、str() - 转换为字符串
1 # 序列类型间的互相转换 2 l1 = ['a', 'b', 'c'] 3 t1 = ('d', 'e', 'f') 4 s1 = 'abc123' 5 s2 = 'abc,123' 6 r1 = range(1,4) 7 8 # list() - 转换为列表 9 l2 = list(t1) 10 print(l2) 11 print(list(s1)) 12 print(s2.split(",")) 13 print(list(r1)) 14 15 # tuple() - 转换为元组 16 print(tuple(l1)) 17 print(tuple(s1)) 18 print(tuple(s2.split(","))) 19 print(tuple(r1)) 20 21 # str函数用于将单个数据转为字符串 join对列表进行连接 22 print(str(l1)) 23 print("".join(l1)) 24 print("|".join(t1)) # join必须要求所有元素都是字符串 25 # print(",".join(r1)) 26 s3 = "" # 将包含数字的序列输出 27 for i in r1: 28 s3 += str(i) 29 print(s3)
第3章 集合的基本操作
3-1 集合的介绍
什么是集合
- 集合(set)是python中的内置数据结构
- 集合可被看做是“没有value的字典”
- {'张三','李四','王五','赵六','宋七','杨八'}
集合的特点
- 集合元素是无序的
- 集合元素不能重复
- 集合是可变的
- 集合允许数学运算
- 集合石分散存储的
集合储存原理
3-2 集合的创建
集合的创建
- 使用{}符号创建集合
- 使用set()函数创建集合
1 # 集合的创建 2 college1 = {"哲学", "经济学", "法学", "教育学"} 3 print(college1) 4 5 # set()内置函数从其他数据结构转换 6 college2 = set(["金融学", "哲学", "经济学", "历史学", "文学"]) 7 print(college2) 8 9 # 使用set创建字符的集合 10 college3 = set("中华人民共和国") 11 print(college3) 12 13 # 空集合的创建 14 # college4 = {} 15 college4 = set() 16 print(type(college4))
3-3 集合的数学运算
集合关系与数学运算
- 交集(intersection)
- 并集(union)
- 差集(difference)
1 # 集合的数学运算 2 college1 = {"哲学", "经济学", "法学", "教育学"} 3 college2 = set(["金融学", "哲学", "经济学", "历史学", "文学"]) 4 5 # 交集,获取两个集合中重复的部分,新建一个集合 6 c3 = college1.intersection(college2) 7 # 更新原有集合 8 college1.intersection_update(college2) 9 print(college1) 10 11 college1 = {"哲学", "经济学", "法学", "教育学"} 12 college2 = set(["金融学", "哲学", "经济学", "历史学", "文学"]) 13 # 并集,将两个集合所有元素合并,去重 14 c4 = college1.union(college2) 15 print(c4) 16 17 college1 = {"哲学", "经济学", "法学", "教育学"} 18 college2 = set(["金融学", "哲学", "经济学", "历史学", "文学"]) 19 # 差集,是指两个集合之间差异的部分 20 # difference代表得到A在B集合中不存在的部分 21 c5 = college2.difference(college1) 22 print(c5) 23 # symmetric_difference 代表双向差集 24 c6 = college1.symmetric_difference(college2) 25 print(c6) 26 27 college1.symmetric_difference_update(college2) 28 print(college1)
3-4 集合间的关系操作(注意多个集合间的操作)
1 # 集合间的关系操作 2 s1 = {1, 2, 3, 4, 5, 6} 3 s2 = {6, 5, 4, 3, 2, 1} 4 # == 判断两个集合的元素是否完全相同 5 print(s1 == s2) 6 7 s3 = {4, 5, 6, 7, 10} 8 s4 = {1, 2, 3, 4, 5, 6, 7, 8} 9 # issubset判断是否为“子集” 10 print(s3.issubset(s4)) 11 # issuperset判断是否为“父集” 12 print(s4.issuperset(s3)) 13 14 s5 = {5} 15 s6 = {1, 3, 5, 7, 9} 16 # isdisjoint 函数判断两个集合是否存在重复元素 17 # True代表不存在重复元素,False则代表存在重复 18 print(s5.isdisjoint(s6))
3-5 操作集合元素
1 # 集合的遍历 2 college1 = {"哲学", "经济学", "法学", "教育学"} 3 for c in college1: 4 print(c) 5 6 # 判断元素存在 7 print("哲学" in college1) 8 print("计算机学" in college1) 9 10 # 集合不支持按索引提取数据 11 # print(college1[3]) 12 13 # add新增数据,一次只能添加一个元素 14 college1.add("计算机学") 15 college1.add("法学") 16 print(college1) 17 # update方法来一次添加多个元素 18 college1.update(["生物学", "工程学"]) 19 print(college1) 20 21 # 更新操作时要删除原有元素,再创建新元素 22 # remove如果删除不存在的元素时,就会报错 23 # college1.remove("生物") 24 # discard如果遇到不存在的元素时,则会忽略删除操作 25 college1.remove("生物学") 26 college1.discard("生物") 27 college1.add("医学") 28 print(college1)
3-6 三种常用生成式
三种内置生成式
- 列表生成式
- 字典生成式
- 集合生成式
# 生成式 # 生成式语法:[被追加的数据 循环语句 循环或者判断语句]|{} # 列表生成式 lst1 = [] for i in range(10, 20): lst1.append(i * 10) print(lst1) lst2 = [i * 10 for i in range(10, 20)] print(lst2) lst3 = [i * 10 for i in range(10, 20) if i % 2 == 0] print(lst3) for i in range(10, 20): if i % 2 == 0: lst3.append(i * 10) print(lst3) lst4 = [i * 10 for i in range(1, 5) for j in range(1, 5)] print(lst4) for i in range(1, 5): for j in range(1, 5): lst4.append(i * j) # 字典生成式 lst5 = ['张三', '李四', '王五'] dict1 = {i+1:lst5[i] for i in range(0,len(lst5))} print(dict1) for i in range(0,len(lst5)): dict1[i+1] = lst5[i] # 集合生成式 set1 = {i * j for i in range(1, 4) for j in range(1, 4) if i == j} print(set1) for i in range(1, 4): for j in range(1, 4): if i == j: set1.add(i * j)
四、课程总结
课程总结
- 元组是“不可变”列表
- 序列是有序数据集合的统称
- 集合是“没有VALUE”的字典
元组(Tuple)
- 元组(Tuple)是“不可变”的列表(List)
- 元组使用小括号,列表使用方括号
- tup1 = ('physics','chemistry',1997,2000)
元组的读与写
- 元组的读取方式与列表相同
- 元组的元素在创建后不允许修改
- 元祖允许使用“元组运算符”来创建新元组
列表与元祖的区别与应用场景
列表 | 元组 |
内容允许扩展 | 内容不可变 |
内存存储动态变化 | 创建后固定不变 |
效率较低 | 效率最高 |
运行时数据需要变更时使用 | 用于保存稳定不变的数据 |
保存天气数据、股市数据 | 保存国家名、元素周期表 |
认识“序列”
- 序列(Sequence)是指“有序”的队列
- 序列中元素顺序按添加顺序排列
- 序列中的数据通过“索引”进行获取
序列包含常用数据结构
- 字符串(Str)
- 列表(List)
- 元组(Tuple)
- 数字序列(Range)
数字序列(Range)
- range用于表示数字序列,内容不可变
- 数字序列使用range()函数创建
- 语法:r=range(0,100)#产生0-99数字序列
序列类型的互相转换
- list() - 转换为列表
- tuple() - 转换为元组
- join()、str() - 转换为字符串
什么是集合
- 集合(set)是python中的内置数据结构
- 集合可被看做是“没有value的字典”
集合的特点
- 集合元素是无序的
- 集合元素不能重复
- 集合是可变的
- 集合允许数学运算
- 集合石分散存储的
集合的创建
- 使用{}符号创建集合
- 使用set()函数创建集合
集合关系与数学运算
- 交集(intersection)
- 并集(union)
- 差集(difference)
三种内置生成式
- 列表生成式
- 字典生成式
- 集合生成式
步骤总结
- python初识
- 变量与字符串
- 流程控制语句
- 运算符
- 可变类型的数据集合
- 非可变类型的数据集合