Python学习之路day3-集合
一、概述
集合(set)是一种无序且不重复的序列。
无序不重复的特点决定它存在以下的应用场景:
- 去重处理
- 关系测试
差集、并集、交集等,下文详述。
二、创建集合
创建集合的方法与创建字典类似,但没有键值对的概念,具体如下:
s1 = {11,22,33}
还可以通过以下两种方法创建:
s2 = set()
s3 = set([11,22,33])
这两种方法本质上是同一种,都是通过调用系统的set()方法进行参数传递和类型转换,如果不传入参数则直接new一个空的集合;如果传入的参数有重复的元素则直接去重处理。
三、集合的常见函数用法
3.1 元素对象常见操作
- add()
添加一个元素到指定的集合,每次只能添加一个。s1 = {"Java", "PHP", "C++"}
print(s1)
s1.add("Python")
print(s1) 输出:
{'C++', 'PHP', 'Java'}
{'C++', 'Python', 'PHP', 'Java'} - remove()
删除集合中指定的对象,一次只能删除一个,如果该对象不存在则报错。s1 = {'Java', 'PHP', 'Python', 'C++'}
s1.remove("C++")
print(s1)
s1.remove("C#") #移除不存在的对象 输出:
Traceback (most recent call last):
File "D:/python/S13/Day3/set.py", line 8, in <module>
s1.remove("C#")
KeyError: 'C#'
{'Java', 'PHP', 'Python'} #第一次成功移除C++,C#不存在,移除时报错 - discard()
与remove()类似,也是删除指定的对象,一次只能删除一个,但是如果该对象不存在时不报错。s1 = {'Java', 'PHP', 'Python', 'C++'}
s1.discard("C++")
s1.discard("C#")
print(s1) 输出:
{'Python', 'PHP', 'Java'} - pop()
删除集合中任意一个对象,注意不能指定。s1 = {'Java', 'PHP', 'Python', 'C++'}
s1.pop()
print(s1) 输出:
运行多次会发现输出的s1不固定 - clear()
清空集合。s1 = {'Java', 'PHP', 'Python', 'C++'}
s1.clear()
print(s1)
print(len(s1)) 输出:
set()
0
3.2 关系测试常见操作
关系测试常用于对两个集合的关系判定。
- difference()
语法结构: set1.difference(set2)或set1 - set2差集关系运算,以新的set集合形式返回set1中包含,但在set2中不存在的元素集合(不影响原set1和set2)。
s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1.difference(s2))
print(s1 - s2)
print(s1)
print(s2) 输出:
{'PHP', 'Python', 'C++'}
{'PHP', 'Python', 'C++'}
{'PHP', 'Python', 'C++', 'Java'}
{'Shell', 'Java', 'Ruby'} - issubset()
语法结构: set1.issubset(set2)
判断集合set1是否为set2的子集,返回布尔值。s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1.issubset(s2)) 输出:
False - issuperset()
语法结构: set1.issuperset(set2)
判断set1是否为set2的父集。s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'C++'}
print(s1.issuperset(s2)) 输出:
True - isdisjoint()
语法结构: set1.isdisjoint(set2)
判断set1和set2是否存在交集, 如果不存在返回True, 存在则返回False.s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'C++'}
s3 = {'GO'}
print(s1.isdisjoint(s2))
print(s1.isdisjoint(s3)) 输出:
False
True - symmetric_difference()
语法结构:set1.symmetric_difference(set2)或set1 ^ set2
返回set1和set2的对称式差集,相当于执行set1.difference(set2)和set2.difference(set1),以新的set集合形式返回set1和set2中差异部分元素(不在两者中同时存在)集合(仅在set1和set2中出现过一次的元素不影响原set1和set2)。s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1.symmetric_difference(s2))
print(s1 ^ s2) 输出:
{'PHP', 'Ruby', 'Shell', 'C++', 'Python'}
{'PHP', 'Ruby', 'Shell', 'C++', 'Python'} - symmetric_difference_update()
语法结构:set1.symmetric_difference(set2)
返回set1和set2的对称式差集,并覆盖更新原set1集合(原来被调用操作的对象),即执行set1 = set1.symmetric_difference(set2)s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1.symmetric_difference(s2))
s1.symmetric_difference_update(s2)
print(s1) 输出:
{'PHP', 'C++', 'Shell', 'Python', 'Ruby'}
{'Python', 'Shell', 'Ruby', 'PHP', 'C++'} - intersection()
语法结构: set1.intersection(set2)或set1 & set2
交集运算,以set方式返回set1和set2的交集部分(同时存在的元素),不影响原集合set1和set2.s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1.intersection(s2)) 输出:
{'Java'} - intersection_update()
语法结构: set1.intersection_update(set2)
执行交集运算,并将结果覆盖更新原集合set1(原来被调用操作的对象)。s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
s1.intersection_update(s2)
print(s1) 输出:
{'Java'} - union()
语法结构: set1.union(set2)或set1 | set2
执行并集计算,合并set1和set2中的对象并做去重处理,最后以集合形式返回结果。
综合上述关系运算函数,可确定并集计算相当于对称差集与交集的并集计算,即合并重复重现的对象和不重复出现的对象,set1.union(set2) = (set1.symmetric_difference(set2)).union(set1.intersection(set2))s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1.union(s2)) 输出:
{'Shell', 'PHP', 'Ruby', 'C++', 'Python', 'Java'} - update()
语法结构: set1.update(obj)
往集合中批量添加元素,添加的对象必须是可以迭代的对象(当然如果原集合中存在与迭代对象中重复的元素会做去重处理),本质上是通过循环,把传入的迭代对象逐个添加更新到原集合中。s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
s1.update(s2)
print(s1) 输出:
{'Python', 'Ruby', 'Shell', 'C++', 'Java', 'PHP'} - in 或not in
成员运算函数同样适用于集合,最后返回布尔值。s1 = {'Java', 'PHP', 'Python', 'C++'}
print('Java' in s1)
if 'Go' in s1:
print("OK")
else:
print("Not OK") 输出:
True
Not OK - <=
语法结构: set1 <= set2
判断set1中的每个元素是否都在set2中,即判断set1是否为set2的子集,等同于set1.issubset(set2)s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
s3 = s1.union(s2)
print(s1 <= s2)
print(s1.issubset(s2))
print(s1 <= s3)
print(s1.issubset(s3)) 输出:
False
False
True
True
3.3 关系测试运算符
常见的关系测试运算符如下:
s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1 - s2)
print(s1.difference(s2))
print("")
print(s1 & s2)
print(s1.intersection(s2))
print("")
print(s1 | s2)
print(s1.union(s2))
print("")
print(s1 ^ s2)
print(s1.symmetric_difference(s2))
print("")
print(s1 <= s2)
print(s1.issubset(s2)) 输出:
{'C++', 'PHP', 'Python'}
{'C++', 'PHP', 'Python'} {'Java'}
{'Java'} {'C++', 'Python', 'Shell', 'Ruby', 'Java', 'PHP'}
{'C++', 'Python', 'Shell', 'Ruby', 'Java', 'PHP'} {'C++', 'Shell', 'Python', 'Ruby', 'PHP'}
{'C++', 'Shell', 'Python', 'Ruby', 'PHP'} False
False
Python学习之路day3-集合的更多相关文章
- python学习之路-day3
本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数 ==================================== 一.集合操作 集合是一个无序的,不重复的数据组合,它的主要 ...
- ql的python学习之路-day3
字典操作 特性: 1.无序的 2.key是唯一的 , ,,], ,,], ,,], }, ,,], 'bbb' : ['a', 'b', 'c'], }}
- python学习博客地址集合。。。
python学习博客地址集合... 老师讲课博客目录 http://www.bootcdn.cn/bootstrap/ bootstrap cdn在线地址 http://www.cnblogs. ...
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- Python学习之路-Day2-Python基础3
Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python 学习之路开始了
python 学习之路开始了.....记录点点滴滴....
随机推荐
- P2322 [HNOI2006]最短母串问题
P2322 [HNOI2006]最短母串问题 AC自动机+bfs 题目要求:在AC自动机建的Trie图上找到一条最短链,包含所有带结尾标记的点 因为n<12,所以我们可以用二进制保存状态:某个带 ...
- P4391 [BOI2009]Radio Transmission 无线传输
P4391 [BOI2009]Radio Transmission 无线传输 kmp 题目让我们求一个串的最小循环子串 我们回想一下kmp中的失配函数 用 f 数组保存当前字符匹配失败后,需要跳到的前 ...
- ”MySQL查询优化“学习总结
查询优化有几种方法,下面分别介绍. 切分查询 一条大的语句(涉及很多行)一次会锁住很多数据(不利于高并发). 占满整个事务日志,耗尽系统资源.阻塞很多小的但很重要的查询. 分解关联查询 关联查询分解方 ...
- tf.equal的使用
tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是一样的 import tensorflow as tf im ...
- sql逻辑查询语句的执行顺序
SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN ...
- 常用模块之 shutil,json,pickle,shelve,xml,configparser
shutil 高级的文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil shut ...
- <offer4> 04_FindInPartiallySortedMatrix
#include<cstdio> bool Find(int* matrix, int rows, int columns, int number) { bool result = fal ...
- IntelliJ-IDEA和Git、GitHub、Gitlab的使用
一.基本入门 1.IntelliJ-IDEA预装的版本控制介绍 我们来看IntelliJ-IDEA的版本控制设置区域 打开File>Settings>Version Control 可以 ...
- 【第二十八章】 springboot + zipkin(brave定制-AsyncHttpClient)
brave本身没有对AsyncHttpClient提供类似于brave-okhttp的ClientRequestInterceptor和ClientResponseInterceptor,所以需要我们 ...
- 51NOD 1133 不重叠的线段
1133 不重叠的线段 X轴上有N条线段,每条线段有1个起点S和终点E.最多能够选出多少条互不重叠的线段.(注:起点或终点重叠,不算重叠). 例如:[1 5][2 3][3 6],可以选[2 ...