2.13 集合类型详解
集合类型
这里的集合同数学意义上的集合,符合数学集合的特性,具有无序性、确定性和互异性。
集合的特点:
1.集合元素不可更改,不能够是可变的数据类型。
2.集合用大括号来表示,,元素之间用逗号分隔。
3.建立集合用{}大括号或者是set()
4.若想建立空集合,必须使用set()
集合的概念:如下例,深入理解集合
# 集合的概念
# 建立A集合,直接使用{}
A={"易烊千玺",123,(1,2,3,4)}
# 建立B集合,用set()
B=set("pypy1123") # 相当于C
B和C集合是相等的
C={'p','y','1','2','3'}
# 根据集合的互异性,集合中不存在相同元素
D={"python",123,"python",123} #相当于C2
E={"python",123}
集合的运算法则:
同数学上的运算法则,四种基础运算为:交、差、并、补
S|T 并运算,包含在集合S和T中的所有元素,与数学上的并集一个道理,包含S和T集合所有的元素。
S&T 交运算,包含既在S中又在T中的集合,取两者相同的部分
S-T 差运算,包含在集合S中但是不在集合T中的元素
S^T 补运算,包含集合S和T中的不相同元素
四种运算共同特点就是,返回类型都是集合类型。
1.并集运算
报错信息:set()函数建立集合
A = {'1','a','c'}
B = set('b','2')
print(A|B)
这段代码我们想知道A和B集合的交集结果,B集合这么建立集合是不对的,报错信息为:
B = set('b','2')
TypeError: set expected at most 1 argument, got 2
说明用set只能添加一条元素信息,不能够填充多条。根据上面的例子,B和C集合相等,建立B集合的时候只能填充一条信息。
A = {'1','a','c','b'}
B = {'2','b'}
print(A | B)
运行结果如下:
{'b', '1', '2', 'a', 'c'}
2.交集运算
A = {'1','a','c','b'}
B = {'2','b'}
print(A & B)
交集好理解,A和B相同的元素就是b,但如果A和B没有相同的元素,他们的交集就是空集。空集是一切集合的子集。
A = {'1','a','c'}
B = {'2','b'}
print(A & B)
这个时候我们运行,看一下结果:
set()Process finished with exit code 0
说明他们的交集就是个空集。
3.差运算
A = {'1','a','c','b'}
B = {'2','b'}
print(A - B)
运行结果下:
{'c', '1', 'a'}
差运算就是包含在集合A中但是不在集合B中的元素,A和B都有‘b’这个元素,所以打印的结果没有b这个元素,都是A里面有B里面没有的元素。每次运行顺序不一样,是由于集合的无序性。
A = {'1','a','c','b'}
B = {'2','b'}
print(B - A)
如果过来B-A,运行结果就是{‘2’}
4.补运算
A = {'1','a','c','b'}
B = {'2','b'}
print(B ^ A)
运行结果:
{'2', 'a', '1', 'c'}
补运算就是B里面包含A与其不同的元素。A和B都有相同的元素b,不算这个相同的元素,输出其他的元素。类似于数学里面的补集。
集合的关系运算
集合有两种关系运算
1.S<=T或者S<T 关系运算,返回True/False,判断S和T的子集关系
2.S>=T或者S>T 关系运算,返回True/False,判断S和T的包含关系
记忆:符号口朝左(小于号或者小于等于号),判断子集。符号口朝右,判断包含
左子集,右包含
子集的数学定义:
如果集合A的任意一个元素都是集合B的元素(任意a∈A则a∈B),那么集合A称为集合B的子集,记为A⊆B或 B⊇A,读作“集合A包含于集合B”或集合B包含集合A”
元素与集合之间的关系是“属于”,集合之间的关系是“包含”
例子:包含关系
# 例1
A = {'1','a','c','b'}
B = {'2','b'}
print(A >= B)
print(A > B)
运行结果如下
False
False
例子2:
# 例2
A = {'1','a','c','b'}
B = {'2','b'}
print(B >= B)
print(B > A)
输出结果:
True
False
从上面两个例子来看,A不包含于B,所以输出结果为False。第二个例子B和它本身关系是包含的,打印True,同时,B也不包含于A。
例子:子集关系
A = {'1','a','c','b'}
B = {'2','b'}
print(B <= A)
print(A < B)
结果都是False,说明他们不互为子集关系。
判断两个集合是否为子集关系的方法
语法:
A.issubset(B)
返回值若是True,则A是B的子集,反之则不是。
A = {'1','a','c','b'}
B = set()
C = {'1','b'}
# print(A <= B)
# print(A < B)
print(A.issubset(B)) # 判断A是否是B的子集
print(B.issubset(B)) # 判断B是否是本身的子集
print(B.issubset(A)) # 判断B是否是A的子集
print(C.issubset(A)) # 判断C是否是A的子集
print(A.issubset(C)) # 判断A是否是C的子集
print(B.issubset(C)) # 判断B是否是C的子集
print(C.issubset(B)) # 判断C是否是B的子集
我们看运行结果:
False
True
True
True
False
True
FalseProcess finished with exit code 0
集合处理的10个方法
1.集合中添加元素:A.add(x)
把元素x加到集合A中,就算A中已经有了x也不会报错
2.集合里移除元素:A.discard(x)
移除集合A中的元素x,就算A中没有x也不会报错
3.集合报错移除元素:A.remove(x)
移除集合A中的元素x,如果A中没有x,则会报错KeyError
4.集合清除:A.clear()
清除集合A中的所有元素
5.A.pop()
从集合中随意返回A的一个值,并更新A,若A为空,则产生KeyError错误
6.A.copy()
返回集合A的一个副本
7.len(A)
返回集合A中的元素的数目
8.x in A
判断元素x是否包含在集合A中
9.x not in A
判断元素x是否不在集合A中
10.set(x)
将其他类型的变量x转换为集合类型
集合应用场景
利用集合的互异性,可以进行数据去重:
A=["p",'y','p','y',123]
s=set(A) # 利用集合无重复元素的特点
ls_new=list(s) # 将集合转变为list
列表和字典的嵌套:
# 最外层是大括号,所以是字典嵌套列表,先找到字典的键对应的列表,再判断列表中要取出元素的偏移量
students = {'第一组':['小明','小红','小刚','小美'],'第二组':['小强','小兰','小伟','小芳']}
print(students['第一组'][3])
#取出'第一组'对应列表偏移量为3的元素,即'小美'# 最外层是中括号,所以是列表嵌套字典,先判断字典是列表的第几个元素,再找出要取出的值相对应的键
scores = [{'小明':95,'小红':90,'小刚':100,'小美':85},{'小强':99,'小兰':89,'小伟':93,'小芳':88}]
print(scores[1]['小强'])
#先定位到列表偏移量为1的元素,即第二个字典,再取出字典里键为'小强'对应的值,即99。
练习:1.打印出字典students
里的小刚 2.打印出列表scores
里小刚的分数100。
students = {'第一组':['小明','小红','小刚','小美'],'第二组':['小强','小兰','小伟','小芳']}
scores = [{'小明':95,'小红':90,'小刚':100,'小美':85},{'小强':99,'小兰':89,'小伟':93,'小芳':88}] print(students['第一组'][2])
print(scores[0]['小刚'])
进阶练习:打印出“狼”:
townee = [{'海底王国':['小美人鱼''海之王''小美人鱼的祖母''五位姐姐'],'上层世界':['王子','邻国公主']},'丑小鸭','坚定的锡兵','睡美人','青蛙王子',[{'主角':'小红帽','配角1':'外婆','配角2':'猎人'},{'反面角色':'狼'}]]print(townee[5][1]['反面角色'])
2.13 集合类型详解相关推荐
- redis的数据结构||1) 字符串类型2) 哈希类型3) 列表类型4) 集合类型 5) 有序集合类型详解
2. 下载安装 1. 官网:https://redis.io 2. 中文网:http://www.redis.net.cn/ 3. 解压直接可以使用: * re ...
- Dart学习笔记六:集合类型详解
目录 前言 List Set Map 集合的遍历 forEach map where any every 前言 Dart的集合类型使用感觉跟ES6中的集合差不多,这里整理一下Dart集合的常用属性和方 ...
- Python集合类型详解(一)——集合定义与集合操作符
今天继续给大家介绍Python相关知识,本文主要内容是Python集合类型定义与集合操作符. 一.集合类型定义 在Python中,集合是一种非常重要的组合数据类型.Python中的集合与数学中的集合非 ...
- oracle集合类型详解
1.集合类型 1.1关联数组 1.2嵌套表 1.3 可变长的数组 2.声明集合类型 2.1声明关联数组 2.2声明嵌套表 2.3声明VARRAY 3.集合变量的声明和初始化 3.1集合变量的声明 3. ...
- python序列类型-Python内置序列类型之集合类型详解
1.集合概念 具有某种特定性质的事物的总体,集合里的东西叫作元素.Python中,集合(set)是一个无序不重复元素的序列. 2.集合的创建 可以使用大括号 { } 或者 set() 函数创建集合,注 ...
- 【python 笔记】集合类型详解
目录 集合: 创建集合 集合的基本操作 集合的内建函数和方法 面向可变集合的内建函数 集合: 无序不重复的元素的组合 利用集合可以删除列表中的重复项(set()唱用作去重操作) 分类:可变集合(set ...
- 自定义PMD检测的类型集合(详解)
自定义PMD检测的类型集合 PMD所能检测的类型(八大种) 使用方法 使用xml配置文件配置多条规则 1.在resources目录下写个配置文件 settings.xml(命名无要求) 2.confi ...
- (转)C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
原文链接:https://www.cnblogs.com/landeanfen/p/5501487.html 阅读目录 一.void无返回值 二.IHttpActionResult 1.Json(T ...
- Java 集合框架 详解
一.Java 集合框架概述 集合框架是一个用来代表和操纵集合的统一架构(java集合框架位于java.util包中).所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.例如 Collec ...
最新文章
- java 获取utc,如何在Java 8中获取UTC + 0日期?
- 有关于Matlab的regionprops函数的PixelIdxList和PixelList的一点解释
- C# 语言规范_版本5.0 (第10章 类)
- linux添加py自启动脚本_PyInstaller详解:将.py文件打包成exe文件
- C# WinForm开发系列 - GDI+【转】
- bootstrap项目实例_101个Python项目打包放送,工作学习必备(源码放送)
- 【python】装饰器的练习题
- Java:基于LinkedList实现栈和队列
- ODA(Open Design Alliance)介绍
- cas session共享
- 17-什么是资源服务器
- html5如何添加图片菜鸟教程,菜鸟入门教程 HTML5的常见用法
- 指针式万用表测量电容
- WorldFirst万里汇推出港币和离岸人民币账户!
- 面试25个经典问题回答技巧
- 《三体》死神永生之感
- 今晚7:30 | 结构化知识的统一建模和多任务学习
- WhatsApp聊天记录迁移新手机,备份如何找回和删除?
- 学习总结20-04-18:包装类
- 黑马头条项目-Vue-day9-文章详情模块、关注与取消关注,点赞和喜欢功能
热门文章
- android app crash测试,APP常见崩溃原因和测试方法整理
- Windows G++ | VisualStudioCodeC语言环境配置(GCC编译器)
- 02-JAVAOOP
- Windows 8/Server 2012/Office 2013 所有版本下载
- 白杨SEO:我是如何用SEO流量思维在生财有术拉新进入分销TOP 50?【实战案例】
- 中国计算机专业的大学生应该如何学习
- 腾讯碾压小公司全纪实:血腥的3Q大战
- Android判断网络
- 6轴机器人直线插补运动
- Kinect的学习笔记发展一Kinect引进和应用