集合类型

这里的集合同数学意义上的集合,符合数学集合的特性,具有无序性、确定性和互异性。

集合的特点:

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 集合类型详解相关推荐

  1. redis的数据结构||1) 字符串类型2) 哈希类型3) 列表类型4) 集合类型 5) 有序集合类型详解

    2. 下载安装     1. 官网:https://redis.io     2. 中文网:http://www.redis.net.cn/     3. 解压直接可以使用:         * re ...

  2. Dart学习笔记六:集合类型详解

    目录 前言 List Set Map 集合的遍历 forEach map where any every 前言 Dart的集合类型使用感觉跟ES6中的集合差不多,这里整理一下Dart集合的常用属性和方 ...

  3. Python集合类型详解(一)——集合定义与集合操作符

    今天继续给大家介绍Python相关知识,本文主要内容是Python集合类型定义与集合操作符. 一.集合类型定义 在Python中,集合是一种非常重要的组合数据类型.Python中的集合与数学中的集合非 ...

  4. oracle集合类型详解

    1.集合类型 1.1关联数组 1.2嵌套表 1.3 可变长的数组 2.声明集合类型 2.1声明关联数组 2.2声明嵌套表 2.3声明VARRAY 3.集合变量的声明和初始化 3.1集合变量的声明 3. ...

  5. python序列类型-Python内置序列类型之集合类型详解

    1.集合概念 具有某种特定性质的事物的总体,集合里的东西叫作元素.Python中,集合(set)是一个无序不重复元素的序列. 2.集合的创建 可以使用大括号 { } 或者 set() 函数创建集合,注 ...

  6. 【python 笔记】集合类型详解

    目录 集合: 创建集合 集合的基本操作 集合的内建函数和方法 面向可变集合的内建函数 集合: 无序不重复的元素的组合 利用集合可以删除列表中的重复项(set()唱用作去重操作) 分类:可变集合(set ...

  7. 自定义PMD检测的类型集合(详解)

    自定义PMD检测的类型集合 PMD所能检测的类型(八大种) 使用方法 使用xml配置文件配置多条规则 1.在resources目录下写个配置文件 settings.xml(命名无要求) 2.confi ...

  8. (转)C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    原文链接:https://www.cnblogs.com/landeanfen/p/5501487.html 阅读目录 一.void无返回值 二.IHttpActionResult 1.Json(T ...

  9. Java 集合框架 详解

    一.Java 集合框架概述 集合框架是一个用来代表和操纵集合的统一架构(java集合框架位于java.util包中).所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.例如 Collec ...

最新文章

  1. java 获取utc,如何在Java 8中获取UTC + 0日期?
  2. 有关于Matlab的regionprops函数的PixelIdxList和PixelList的一点解释
  3. C# 语言规范_版本5.0 (第10章 类)
  4. linux添加py自启动脚本_PyInstaller详解:将.py文件打包成exe文件
  5. C# WinForm开发系列 - GDI+【转】
  6. bootstrap项目实例_101个Python项目打包放送,工作学习必备(源码放送)
  7. 【python】装饰器的练习题
  8. Java:基于LinkedList实现栈和队列
  9. ODA(Open Design Alliance)介绍
  10. cas session共享
  11. 17-什么是资源服务器
  12. html5如何添加图片菜鸟教程,菜鸟入门教程 HTML5的常见用法
  13. 指针式万用表测量电容
  14. WorldFirst万里汇推出港币和离岸人民币账户!
  15. 面试25个经典问题回答技巧
  16. 《三体》死神永生之感
  17. 今晚7:30 | 结构化知识的统一建模和多任务学习
  18. WhatsApp聊天记录迁移新手机,备份如何找回和删除?
  19. 学习总结20-04-18:包装类
  20. 黑马头条项目-Vue-day9-文章详情模块、关注与取消关注,点赞和喜欢功能

热门文章

  1. android app crash测试,APP常见崩溃原因和测试方法整理
  2. Windows G++ | VisualStudioCodeC语言环境配置(GCC编译器)
  3. 02-JAVAOOP
  4. Windows 8/Server 2012/Office 2013 所有版本下载
  5. 白杨SEO:我是如何用SEO流量思维在生财有术拉新进入分销TOP 50?【实战案例】
  6. 中国计算机专业的大学生应该如何学习
  7. 腾讯碾压小公司全纪实:血腥的3Q大战
  8. Android判断网络
  9. 6轴机器人直线插补运动
  10. Kinect的学习笔记发展一Kinect引进和应用