参考链接: Python集合set| pop函数

Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:

{element1,element2,...,elementn}

从内容上看,同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。

并且需要注意的是,数据必须保证是唯一的,因为集合对于每种数据元素,只会保留一份

Python 提供了 2 种创建 set 集合的方法,分别是使用 {} 创建和使用 set() 函数将列表、元组等类型数据转换为集合。

[root@kube set]# cat demo.py

a = {1,2,1,'test','hi','test','one'}

print(type(a))

print(a)

[root@kube set]# py demo.py

<class 'set'>

{'hi', 1, 2, 'one', 'test'}

[root@kube set]#

set1 = set("c.biancheng.net")

set2 = set([1,2,3,4,5])

set3 = set((1,2,3,4,5))

print("set1:",set1)

print("set2:",set2)

print("set3:",set3)

注意,如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {},Python 解释器会将其视为一个空字典。

python 访问set集合元素

由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素。Python 中,访问集合元素最常用的方法是使用循环结构,将集合中的数据逐一读取出来。

[root@kube set]# cat demo.py

a = {1,2,1,'test','hi','test','one'}

print(type(a))

for ele in a:          #遍历查看

print(ele,end='--')

del a             #删除

print(a)

[root@kube set]# py demo.py

<class 'set'>

1--2--hi--test--one--Traceback (most recent call last):

File "demo.py", line 7, in <module>

print(a)

NameError: name 'a' is not defined

[root@kube set]#

Python set集合基本操作(添加、删除、交集、并集、差集)

Python set 集合最常用的操作是向集合中添加、删除元素,以及集合之间做交集、并集、差集等运算,本节将一一讲解这些操作的具体实现。

[root@kube set]# cat demo1.py

a = {1,2,'three','four',(5,6)}

b = {1,8,'th','fo',(5,6)}

c = {1,2,'three','four',(5,6)}

d = {1,8,'th','fo',(5,6)}

a.add('hi')                      #add() 函数添加,每次接收一个参数

b.remove((5,6))                  #remove 删除,每次只接收一个参数

print(a)

print(b)

[root@kube set]# py demo1.py

{1, 2, 'four', (5, 6), 'hi', 'three'}

{1, 8, 'th', 'fo'}

[root@kube set]#

Python set集合做交集、并集、差集运算

图 1 中,有 2 个集合,分别为 set1={1,2,3} 和 set2={3,4,5},它们既有相同的元素,也有不同的元素。以这两个集合为例,分别做不同运算的结果如表 1 所示。

表 1 Python set集合运算

运算操作Python运算符含义例子交集&取两集合公共的元素>>> set1 & set2{3}并集|取两集合全部的元素>>> set1 | set2{1,2,3,4,5}差集-取一个集合中另一集合没有的元素>>> set1 - set2{1,2}>>> set2 - set1{4,5}对称差集^取集合 A 和 B 中不属于 A&B 的元素>>> set1 ^ set2{1,2,4,5}

[root@kube set]# cat demo1.py

a = {1,2,'three','four',(5,6)}

b = {1,8,'th','fo',(5,6)}

print(a & b) #求交集

print(a | b) #求合集

print(a - b) #求差集

print(a ^ b) #求对称差集,就是除了交集剩下的所有

[root@kube set]# py demo1.py

{(5, 6), 1}

{1, 2, 'three', (5, 6), 8, 'th', 'four', 'fo'}

{'four', 2, 'three'}

{'fo', 2, 'three', 'four', 8, 'th'}

[root@kube set]#

Python set集合方法详解

>>> dir(set)

['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

>>>

各个方法的具体语法结构及功能如表 1 所示。

表 1

Python set方法

方法名语法格式功能实例add()set1.add()向 set1 集合中添加数字、字符串、元组或者布尔类型>>> set1 = {1,2,3}>>> set1.add((1,2))>>> set1{(1, 2), 1, 2, 3}clear()set1.clear()清空 set1 集合中所有元素>>> set1 = {1,2,3}>>> set1.clear()>>> set1set()set()才表示空集合,{}表示的是空字典copy()set2 = set1.copy()拷贝 set1 集合给 set2>>> set1 = {1,2,3}>>> set2 = set1.copy()>>> set1.add(4)>>> set1{1, 2, 3, 4}>>> set1{1, 2, 3}difference() set3 = set1.difference(set2)将 set1 中有而 set2 没有的元素给 set3>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set3 = set1.difference(set2)>>> set3{1, 2}difference_update()set1.difference_update(set2)从 set1 中删除与 set2 相同的元素>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set1.difference_update(set2)>>> set1{1, 2}discard()set1.discard(elem)删除 set1 中的 elem 元素>>> set1 = {1,2,3}>>> set1.discard(2)>>> set1{1, 3}>>> set1.discard(4){1, 3}intersection()set3 = set1.intersection(set2)取 set1 和 set2 的交集给 set3>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set3 = set1.intersection(set2)>>> set3{3}intersection_update()set1.intersection_update(set2)取 set1和 set2 的交集,并更新给 set1>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set1.intersection_update(set2)>>> set1{3}isdisjoint()set1.isdisjoint(set2)判断 set1 和 set2 是否没有交集,有交集返回 False;没有交集返回 True>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set1.isdisjoint(set2)Falseissubset()set1.issubset(set2)判断 set1 是否是 set2 的子集>>> set1 = {1,2,3}>>> set2 = {1,2}>>> set1.issubset(set2)Falseissuperset()set1.issuperset(set2)判断 set2 是否是 set1 的子集>>> set1 = {1,2,3}>>> set2 = {1,2}>>> set1.issuperset(set2)Truepop()a = set1.pop()取 set1 中一个元素,并赋值给 a>>> set1 = {1,2,3}>>> a = set1.pop()>>> set1{2,3}>>> a1remove()set1.remove(elem)移除 set1 中的 elem 元素>>> set1 = {1,2,3}>>> set1.remove(2)>>> set1{1, 3}>>> set1.remove(4)Traceback (most recent call last):  File "<pyshell#90>", line 1, in <module>    set1.remove(4)KeyError: 4symmetric_difference()set3 = set1.symmetric_difference(set2)取 set1 和 set2 中互不相同的元素,给 set3>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set3 = set1.symmetric_difference(set2)>>> set3{1, 2, 4}symmetric_difference_update()set1.symmetric_difference_update(set2)取 set1 和 set2 中互不相同的元素,并更新给 set1>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set1.symmetric_difference_update(set2)>>> set1{1, 2, 4}union()set3 = set1.union(set2)取 set1 和 set2 的并集,赋给 set3>>> set1 = {1,2,3}>>> set2 = {3,4}>>> set3=set1.union(set2)>>> set3{1, 2, 3, 4}update()set1.update(elem)添加列表或集合中的元素到 set1>>> set1 = {1,2,3}>>> set1.update([3,4])>>> set1{1,2,3,4}

Python frozenset集合(set集合的不可变版本)

frozenset 是 set 的不可变版本,因此 set 集合中所有能改变集合本身的方法(如 add、remove、discard、xxx_update 等),frozenset 都不支持;set 集合中不改变集合本身的方法,fronzenset 都支持。在交互式解释器中输入 dir(frozenset) 命令来查看 frozenset 集合的全部方法,可以看到如下输出结果:

>>> dir(frozenset)

['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']

>>>

很明显,frozenset 的这些方法和 set 集合同名方法的功能完全相同。frozenset 的作用主要有两点:

当集合元素不需要改变时,使用 frozenset 代替 set 更安全。当某些 API 需要不可变对象时,必须用 frozenset 代替set。比如 dict 的 key 必须是不可变对象,因此只能用 frozenset;再比如 set 本身的集合元素必须是不可变的,因此 set 不能包含 set,set 只能包含 frozenset。

[root@kube set]# cat demo2.py

s = set()

#创建 frozenset 不可变集合,使用 frozenset() 函数

frozen_s = frozenset('Kotlin')

# 为set集合添加frozenset

s.add(frozen_s)

print('s集合的元素:', s)

sub_s = {'Python'}

# 为set集合添加普通set集合,程序报错

s.add(sub_s)

[root@kube set]# py demo2.py

s集合的元素: {frozenset({'o', 't', 'l', 'n', 'K', 'i'})}

Traceback (most recent call last):

File "demo2.py", line 9, in <module>

s.add(sub_s)

TypeError: unhashable type: 'set'

[root@kube set]#

浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。

所谓深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。

Python 中以 copy.deepcopy() 来实现对象的深度拷贝

copy这部分参考: http://c.biancheng.net/view/5358.html

转载于:https://www.cnblogs.com/zy09/p/11599261.html

[转载] python set 集合详解相关推荐

  1. python 定义空集合_Python学习04.16:Python set集合详解

    Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同. 从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间 ...

  2. [转载] Python:Numpy详解

    参考链接: Python中的numpy.vdot NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行 ...

  3. [转载] Python字符串操作方法详解

    参考链接: Python字符串方法| 2(len,count,center,ljust,rjust,isalpha,isalnum,isspace和join) 最近处理近10万条数据,大量字符串需要处 ...

  4. 7、【转载】python yield generator 详解

    7.[转载]python yield generator 详解 目录 generator基础 generator应用 generator基础应用 generator高级应用 注意事项: 正文 本文将由 ...

  5. 【Python】set集合详解

    set集合详解 概述 创建 set集合(2种) 1) 使用 {} 创建 2) set()函数创建集合 访问set集合元素 删除set集合 set集合中添加元素 set集合中删除元素 set集合做交集. ...

  6. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. 在编程中,几 ...

  7. python协程详解_python协程详解

    原博文 2019-10-25 10:07 − # python协程详解 ![python协程详解](https://pic2.zhimg.com/50/v2-9f3e2152b616e89fbad86 ...

  8. Python元组类型详解

    今天继续给大家介绍Python相关知识,本文主要内容是Python元组类型定义.操作及应用. 一.元组类型定义 在Python中,元组类型是一种序列类型的一种,并且一旦创建,就不能够被修改. 元组的创 ...

  9. Python字符编码详解

    Python字符编码详解 转自http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html Python字符编码详解 本文简单介绍了各种常用的 ...

最新文章

  1. 100天59万行代码_如何抽出100天的代码时间
  2. wtl中显示html,用WTL构建HTML界面应用程序(1)
  3. java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF
  4. 在python中排序元组
  5. 给定一个整数N,那么N的阶乘N!末尾有多少个零呢?
  6. python kotlin_Java和Python中类似Kotlin的生成器,续:附加参数
  7. 音视频开发( 34)---麦克风阵列原理二
  8. java swing 升级_Swing - 更新标签
  9. 快乐大本营中测试声音年龄的软件_海天味极鲜酱油极限挑战宝藏行 终极试炼,极限成员们勇登珠峰大本营...
  10. Spring Boot + Vue + Shiro 实现前后端分离,写得太好了!
  11. Jmeter4.0新版本特性研究
  12. Weblogic部署
  13. 2021微信透明头像!真实有用
  14. Quartz定时任务框架(二):Trigger触发器详解
  15. 推荐几款2021年好用的固定资产管理系统(软件)
  16. 树莓派笔记17: 语音机器人
  17. android scroller,深入理解Android中Scroller的滚动原理
  18. bbs.ncar forum.php,无删减又好看的美剧资源网站
  19. 室友在宿舍玩游戏我学java_在宿舍写代码总被一个室友认为在装逼,该怎么办?...
  20. 苹果在高端手机市场碾压安卓手机,国产旗舰不入前十

热门文章

  1. Java常用的几个Json库
  2. NYOJ96 - n-1位数
  3. JavaScript的输出(2)
  4. 操作系统—数组的定义和存储结构
  5. oracle当前用户创建的表不可见?
  6. Pikachu实验过程3(XSS的分析)
  7. Unity3D之UGUI基础1:UGUI插件介绍
  8. bzoj 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列
  9. 决策单调性Ⅱ:斜率优化(1597: [Usaco2008 Mar]土地购买)
  10. bzoj 1096: [ZJOI2007]仓库建设(斜率DP)