Python数据类型-集合(set)
1、创建集合
集合的创建不同于前两种数据结构。
集合通过set(iterable)方法创建,参数iterable为可迭代对象。
示例代码:
s1 = set('好好学习天天想上') # 将字符串分解为单个字符,作为集合的元素创建集合
s2 = set(('好好', '学习', '天天', '想上')) # 将元组分解为单个元素,作为集合元素创建集合
s3 = set(['好好', '学习', '天天', '想上']) # 将列表分解为单个元素,作为集合元素创建集合
print (s1) # 显示输出结果为:{'好', '习', '上', '天', '想', '学'}
print (s2) # 显示输出结果为:{'好好', '想上', '学习', '天天'}
print (s3) # 显示输出结果为:{'好好', '想上', '学习', '天天'}
通过上方示例,大家能够看出:
- 集合可以通过可迭代对象(字符串、元组、列表等)进行创建;
- 集合中的元素不可重复;
- 集合中的元素无序排列。
2、添加元素
集合添加元素的方法有两种。
添加单个元素:使用add(element)函数,参数element为集合允许添加的元素(例如数字、字符串、元组等)。
添加多个元素:使用update(iterable)函数,参数iterable为可迭代对象。
示例代码:
# 创建集合
s1 = set('123')
s2 = set('123')
s3 = set('abc') # 添加单个元素
s1.add('4') # 添加多个元素
s2.update(['4','5','6']) # 添加列表到集合,列表元素会被分解为单个元素后添加到集合
s3.update('de') # 添加字符串到集合,字符串会被分解为单个元素后添加到集合 # 显示输出
print (s1) # 显示输出结果为:{'4', '3', '1', '2'}
print (s2) # 显示输出结果为:{'4', '2', '6', '5', '3', '1'}
print (s3) # 显示输出结果为:{'c', 'b', 'd', 'e', 'a'} #注意:因为集合元素是无序的,大家在测试以上代码时,显示输出的结果与上方结果,可能在顺序上不一致。
3、删除元素
集合删除元素的方法有两种。
第一种:使用remove(element)方法删除指定元素,参数element为需要删除的元素。
第二种:使用discard(element)方法删除指定元素,参数element为需要删除的元素。
示例代码:
# 创建集合
s1 = set(['Python','Java','C','C++','C#'])
s2 = set(['Python','Java','C','C++','C#']) # 删除元素
s1.remove('C++')
s2.discard('C++') # 显示输出
print (s1) # 显示输出结果为:{'C', 'Python', 'Java', 'C#'}
print (s2) # 显示输出结果为:{'C', 'Python', 'Java', 'C#'}
从上方示例中,大家能够看到remove()和discard()的作用是一样的。
不过,这两个方法是有区别的。
当集合中不存在这两个方法参数中填入的元素时,remove()方法会抛出异常,而discard()方法则没有任何影响。
4、取出元素
集合支持pop()方法取出元素。
示例代码:
# 创建集合
s = set(['Python','Java','C','C++','C#']) # 显示输出
print (s) # 显示输出结果为:{'Python', 'C#', 'C++', 'Java', 'C'}
print (s.pop()) # 取出集合元素,显示输出结果为:Python
print (s) # 显示输出结果为:{'C#', 'C++', 'Java', 'C'}
5、清空集合
集合支持clear()方法进行清空。
示例代码:
# 创建集合
s = set(['Python','Java','C','C++','C#']) # 清空集合
s.clear() # 显示输出
print (s) # 显示输出结果为:set()
6、交集/并集/补集/差集
首先我们来看张图,理解交集、并集、补集、差集的概念。

假设有集合A{1,2,3}和B{3,4,5}。
交集:A和B中相同部分的内容,{3}。
并集:A和B去重后的全部内容,{1,2,3,4,5}。
补集:A去除与B相交部分后的内容,{1,2}。
差集:A和B不相交部分的全部内容,{1,2,4,5}。
示例代码:
# 创建集合
s1 = set('Python')
s2 = set('PyCharm') # 交集操作:获取两个集合中共有元素。
print (s1 & s2) # 显示输出结果为:{'y', 'P', 'h'}
print (s1.intersection(s2)) # 显示输出结果为:{'y', 'P', 'h'} # 并集操作:获取两个集合去除重复元素后的全部元素。
print (s1 | s2) # 显示输出结果为:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
print (s1.union(s2)) # 显示输出结果为:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'} # 补集操作:获取当前集合去除与另一集合交集元素后的全部元素。
print (s1 - s2) # 显示输出结果为:{'o', 't', 'n'}
print (s1.difference(s2)) # 显示输出结果为:{'o', 't', 'n'}
print (s2 - s1) # 显示输出结果为:{'m', 'a', 'r', 'C'}
print (s2.difference(s1)) # 显示输出结果为:{'m', 'a', 'r', 'C'} # 差集操作:获取两个集合去除交集元素后的全部元素。
print (s1 ^ s2) # 显示输出结果为:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
print (s1.symmetric_difference(s2)) # 显示输出结果为:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
以上操作中,对集合本身内容并无影响,大家可以在执行以上代码后,继续显示输出s1和s2的内容,能够看到没有任何变化。
接下来,我们再来看几个方法,这些方法会改变集合内容。
第一种:difference_update(set) 函数,能够将当前集合和指定集合进行补集运算,并将当前集合内容更新为运算结果。
示例代码:
s1=set('1234')
s2=set('456')
s1.difference(s2) # 该操作对s1内容无影响
print (s1) # s1无变化,显示输出结果为:{'3', '4', '2', '1'}
s1.difference_update(s2) # 更新集合s1的内容为s1-s2后的结果
print (s1) # s1内容被更新,显示输出结果为:{'3', '2', '1'}
第二种:intersection_update(set) 函数,能够将当前集合和指定集合进行交集运算,并将当前集合内容更新为运算结果。
示例代码:
s1=set('1234')
s2=set('456')
s1.intersection_update(s2) # 更新集合s1的内容为s1 & s2后的结果
print (s1) # s1内容被更新,显示输出结果为:{'4'}
第三种:symmetric_difference_update(set) 函数,能够将当前集合和指定集合进行差集运算,并将当前集合内容更新为运算结果。
示例代码:
s1 = set('1234')
s2 = set('456')
s1.symmetric_difference_update(s2) # 更新集合s1的内容为s1 ^ s2后的结果
print(s1) # s1内容被更新,显示输出结果为:{'6', '3', '2', '5', '1'}
7、成员关系
Python中提供了一些方法,让我们能够判断一个集合中是否包含某一元素;
也可以判断一个集合是否另一个集合的子集或超集。
还可以判断一个集合与另一个集合是否没有交集。

在之前我们接触过“in”这操作符,可以用来判断操作符前方的值是否被后方的序列包含(成员关系)。
另外,我们还可以使用“not in”,判断操作符前方的值是否未被后方的序列包含(非成员关系)。
在集合中,我们同样可以使用这两个操作符。
另外,我们还可以通过以下方法,判断一个集合是否另外一个集合的子集或超集以及没有交集。
isdisjoint(set):可以判断集合是否与指定集合不存在交集,参数set为集合;如果成立返回结果为True,否则为False。
issubset(set):可以判断集合是否指定集合的子集,参数set为集合;如果成立返回结果为True,否则为False。
issuperset(set):可以判断集合是否指定集合的超集,参数set为集合;如果成立返回结果为True,否则为False。
示例代码:
s1 = set('好好学习')
s2 = set('天天想上')
s3 = set('好好学习天天想上')
print ('好' in s1) # 显示输出结果为:True
print ('好' not in s2) # 显示输出结果为:True
print (s1.isdisjoint(s2)) # 显示输出结果为:True
print (s1.issubset(s3)) # 显示输出结果为:True
print (s3.issuperset(s1)) # 显示输出结果为:True
8、复制集合
使用copy()方法能够对集合进行复制。
大家通过下方代码即可理解复制的用途。
示例代码:
a = set('小楼一夜听春语') # 创建集合存入变量a
b = a # 创建变量b引用变量a的集合
c = a.copy() # 创建变量c复制变量a的值
print (a) # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
print (b) # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
print (c) # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
a.remove('一') # 删除变量a中集合的一个元素
print (a) # 变量a发生改变,显示输出结果为:{'春', '夜', '楼', '听', '语', '小'}
print (b) # 变量b因为引用变量a,同样发生改变,显示输出结果为:{'春', '夜', '楼', '听', '语', '小'}
print (c) # 变量c没有改变,显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
如果还不能够理解,我们可以看下面这张图。

代码中,b = a实际上是将b指向了a的内容,所以当a的内容发生变化时,b同步发生了变化。
而c = a.copy()则是将a的内容真正进行了复制,不再受a的变化影响。
9、其他
集合也支持len()方法进行元素数量的获取,也支持max()方法和min方法获取集合中的最大元素与最小元素,在此不再赘述
Python数据类型-集合(set)的更多相关文章
- Python数据类型--集合(set)
Python的集合是无序.可迭代的容器对象,所有元素放在一对大括号中{},元素之间使用逗号隔开,同一集合内的元素具有唯一性,不允许重复. 集合中只能包含数字.字符串.元组等不可变类型的数据,不能包含列 ...
- python初步学习-python数据类型-集合(set)
集合 在已经学过的数据类型中: 能够索引的,如list/str,其中的元素可以重复 可变的,如list/dict,即其中的元素/键值对可以原地修改 不可变的,如str/int,即不能进行原地修改 无索 ...
- 10 Python 数据类型—集合
在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法 ...
- Python 数据类型--集合(set)
一.集合(set) 集合也是一种数据类型,一个类似列表的,无序的,不重复的.它主要有两大作用 1.把一个列表变为集合,就自动去重了,不需要写额外的代码 2.关系测试,测试两组数据之间的交际.差集.并集 ...
- python数据类型(集合)
一.集合概念 集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合. 集合中的元素三个特征: 确定性(元素必须可hash) 互异性(去重)——将一个列表变为集合,就自动去重了 无序性(集合中 ...
- python 数据类型 --- 集合
1. 注意列表和集合的区别 set 列表表现形式: list_1 = [1,3,4]; 集合表现形式:set_1= set() list_1 = [1,2,3,4,23,4,2] print(lis ...
- python基础3 ---python数据类型二
ython基础 一.python数据类型 ------列表(list) 1.定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性:可存放多个不同类型的值:可修改指定索 ...
- python数据类型之元组、字典、集合
python数据类型元组.字典.集合 元组 python的元组与列表类似,不同的是元组是不可变的数据类型.元组使用小括号,列表使用方括号.当元组里只有一个元素是必须要加逗号: >>> ...
- Python数据类型的内置函数之tuple(元组),dict(字典),set(集合)
Python数据类型内置函数 - str(字符串) - list(列表) - tuple(元组) - dict(字典) - set(收集) tuple(元组)的操作 - (count)统计元组中元素出 ...
随机推荐
- OpenCV---图像二值化
一:什么是二值图像 彩色图像:三个通道0-,-,-,所以可以有2^24位空间 灰度图像:一个通道0-,所以有256种颜色 二值图像:只有两种颜色,黑和白,1白色,0黑色 二:图像二值化 (一)先获取阈 ...
- Python学习笔记(二十九)ThreadLocal
import threading #创建全局ThreadLocal对象: local_school = threading.local() def process_student(): #获取当前线程 ...
- Python学习笔记(十五)用Python获取本地数据
f1 = open(r'E:\Python\Data\data1.txt') #读取data1.txt文件,使用系统默认缓冲区大小, 为了读取快点,使用缓存吧! f = open(r'E:\Pytho ...
- 移动Web界面样式-CSS3
CSS2.1发布至今已经有7年的历史,在这7年里,互联网的发展 已经发生了翻天覆地的变化.CSS2.1有时候难以满足快速提高性能.提升用户体验的Web应用的需求.CSS3标准的出现就是增强CSS2.1 ...
- [php]require&require_once&include&include_once的用法与区别
1.require和include是php引入php文件的两种方式,使用格式如下: require(include) 文件名; require(include) 变量(此变量存储的是文件名); 2.区 ...
- 51nod 1073 约瑟夫环
题目链接 先说一下什么是约瑟夫环,转自:传送门 关于约瑟夫环问题,无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大( ...
- HDU 3790 最短生成树 (最短路)
题目链接 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. ...
- 47、Python面向对象中的继承有什么特点?
继承的优点: 1.建造系统中的类,避免重复操作. 2.新类经常是基于已经存在的类,这样就可以提升代码的复用程度. 继承的特点: 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要 ...
- 面试中关于Redis的问题看这篇就够了
昨天写了一篇自己搭建redis集群并在自己项目中使用的文章,今天早上看别人写的面经发现redis在面试中还是比较常问的(笔主主Java方向).所以查阅官方文档以及他人造好的轮子,总结了一些redis面 ...
- python3.4.3安装allure2记录
一.安装:cmd执行命令pip install allure-pytest 二.下载allure2:2.7.0版本 https://dl.bintray.com/qameta/generic/io/q ...