Python 还包含了一个数据类型 —— set (集合)。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。

创建集合set

大括号或 set() 函数可以用来创建集合。

set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组进行去重操作。

创建空集合

>>> s=set()

>>> s

set()

>>> s1=set([]) #列表

>>> s1

set()

>>> s2=set(()) #元组

>>> s2

set()

>>> s3=set({}) #字典

>>> s3

set()

注意:想要创建空集合,你必须使用 set() 而不是 {}。后者用于创建空字典,我们在后面介绍的一种数据结构。

创建非空集合

即列表,元组,字典不在是空值,举两个例子

>>> s1=set([1,2,3,4])

>>> s1

{1, 2, 3, 4}

>>> s3=set({'a':2,'b':3,'c':4})

>>> s3

{'c', 'a', 'b'}

注:字典转set集合,需要注意的是,只取了字典的key,相当于将字典中的dict.keys()列表转成set集合。

集合的操作

集合添加

集合的添加有两种方式,分别是add和update。但是它们在添加元素时是由区别的:

add()方法

把要传入的元素作为一个整体添加到集合中,如:

>>> s=set('one')

>>> s

{'e', 'o', 'n'}

>>> s.add('two')

>>> s

{'e', 'two', 'o', 'n'}

update()方法

是把要传入的元素拆分成单个字符,存于集合中,并去掉重复的字符。可以一次添加多个值,如:

>>> s=set('one')

>>> s

{'e', 'o', 'n'}

>>> s.update('two')

>>> s

{'e', 'n', 't', 'w', 'o'}

集合删除

集合的删除操作使用的方法跟列表是一样的,使用的也是remove方法。如:

setVar.remove(element)

setVar :为一个set类型的变量

element :表示要查找并删除的元素

函数作用:

在集合setVar中查找element元素,如果存在则删除;如果没找到,则报错。

>>> s=set('one')

>>> s

{'e', 'o', 'n'}

>>> s.remove('e')

>>> s

{'n', 'o'}

setVar.discard(element)

setVar :为一个set类型的变量

element :表示要查找并删除的元素

函数作用:

在集合setVar中查找element元素,如果存在则删除;如果没找到,则什么也不做。

>>> sList

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

>>> sList.discard(1)

>>> sList

set([2, 3, 4, 5])

s.pop()

s:为set类型的变量

函数作用:

删除并返回set类型的s中的一个不确定的元素,如果为空引发KeyError错误。

>>> sList

set([2, 3, 4, 5])

>>> sList.pop()

2

s.clear()

s:set类型的变量

函数作用:

清空s集合中的所有元素

>>> sList

set([3, 4, 5])

>>> sList.clear()

>>> sList

set([])

集合的遍历

集合的遍历跟序列的遍历方法完全一样。

>>> s=set('one')

>>> s

{'e', 'o', 'n'}

>>> for i in s:

print(i)

... ...

e

o

n

>>>

另一种遍历方式:

>>> s=set('one')

>>> s

{'e', 'o', 'n'}

>>> for idex,i in enumerate(s):

print (idex,i)

... ...

0 e

1 o

2 n

>>>

变量idex表示集合中元素i的索引。

集合其他方法

函数

说明

len(s)

set 的长度

x in s

测试 x 是否是 s 的成员

x not in s

测试 x 是否不是 s 的成员

s.issubset(t)

测试是否 s 中的每一个元素都在 t 中

s.issuperset(t)

测试是否 t 中的每一个元素都在 s 中

s.union(t)

返回一个新的 set 包含 s 和 t 中的每一个元素

s.intersection(t)

返回一个新的 set 包含 s 和 t 中的公共元素

s.difference(t)

返回一个新的 set 包含 s 中有但是 t 中没有的元素

s.symmetric_difference(t)

返回一个新的 set 包含 s 和 t 中不重复的元素

s.copy()

返回 set “s”的一个浅复制

集合的一些操作符

既然是集合,那就会遵循集合的一些操作方法,如求交集、并集、差集等。

交集

Python中求集合的交集使用的符号是“&”,返回连个集合的共同元素的集合,即集合的交集。

>>> st1 = set('python')

>>> st1

set(['h', 'o', 'n', 'p', 't', 'y'])

>>> st2 = set('htc')

>>> st2

set(['h', 'c', 't'])

>>> st1 & st2

set(['h', 't'])

并集(合集)

Python中求集合的并集用的是符号“|”,返回的是两个集合所有的并去掉重复的元素的集合。

>>> st1

set(['h', 'o', 'n', 'p', 't', 'y'])

>>> st3 = set('two')

>>> st3

set(['o', 't', 'w'])

>>> st1 | st3

set(['p', 't', 'w', 'y', 'h', 'o', 'n'])

差集

Python中差集使用的符号是减号“-”。

>>> st1

set(['1', '3', '2', '5', '4', '7', '6'])

>>> st2 = set('4589')

>>> st2

set(['9', '8', '5', '4'])

>>> st1 - st2

set(['1', '3', '2', '7', '6'])

返回的结果是在集合st1中但不在集合st2中的元素的集合。

集合的不同

查看两个集合的不同之处,使用的difference函数,等价于差集。如:

**s1.difference(s3) **

这种不同指的是集合s3相对于集合s1,不同的地方,也就是所有在集合s1中,而不再集合s2中的的元素组成的新集合。

>>> s1

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

>>> s2

set([1, 2, 3, 4])

>>> s1.difference(s2)

set([5])

>>> s3

set(['1', '8', '9', '5'])

>>> s1.difference(s3)

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

集合的范围判断

集合可以使用大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)来判断某个集合是否完全包含于另一个集合,也可以使用子父集判断函数。

定义三个集合s1,s2,s3:

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

>>> s2=set([1, 2, 3, 4])

>>> s3=set(['1', '8', '9', '5'])

大于(>)或大于等于(>=)

>>> s1 > s2

True

>>> s1 > s3

False

>>> s1 >= s2

True

表示左边集合是否完全包含右边集合,如集合s1是否完全包含集合s2。

小于(<)或 小于等于(<=)

>>> s2 < s1

True

>>> s1 < s3

False

>>> s3 < s1

False

表示左边的集合是否完全包含于右边的集合,如集合s1是否完全包含于集合s2。

等于(==)、不等于(!=)

>>> s1 == s2

False

>>> s2 == s3

False

>>> s1 != s2

True

判断两个集合是否完全相同。

不可变集合frozenset

Python中还有一种不可改变的集合,那就是frozenset,不像set集合,可以增加删除集合中的元素,该集合中的内容是不可改变的,类似于字符串、元组。

>>> f = frozenset()

>>> f

frozenset([])

>>> f = frozenset('asdf')

>>> f

frozenset(['a', 's', 'd', 'f'])

>>> f = frozenset([1,2,3,4])

>>> f

frozenset([1, 2, 3, 4])

>>> f = frozenset((1,2,3,4))

>>> f

frozenset([1, 2, 3, 4])

>>> f = frozenset({1:2, 'a':2, 'c':3})

>>> f

frozenset(['a', 1, 'c'])

如果试图改变不可变集合中的元素,就会报AttributeError错误。

不可变集合,除了内容不能更改外,其他功能及操作跟可变集合set一样。

set python_Python的set集合详解相关推荐

  1. Java集合详解之Map

    一.首先看看集合框架体系图 从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解 二.Map是什么? Map<k,v>使用键值 ...

  2. 1.8 Collections类操作集合详解——排序,查找,复制

    Collections类操作集合详解 Collections 类是 Java 提供的一个操作 Set.List 和 Map 等集合的工具类. Collections 类提供了许多操作集合的静态方法,借 ...

  3. java list取值_Java集合详解

    一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为了满足这些常规的编程需要,我们要 ...

  4. php打印出函数的内容吗,PHP打印函数集合详解以及PHP打印函数对比详解(精)

    1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 1 echo() 可以同时输出多个字符串,可以多 ...

  5. 集合 (二) ----- Map集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...

  6. 集合 (一) ----- 集合的基本概念与Collection集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 集合的基本概念 一.集合的分类 ...

  7. Java集合详解6:TreeMap和红黑树

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  8. 【Java-Java集合】Java集合详解与区别

    [Java-Java集合]Java集合详解与区别 1)概述 2)集合框架图 2.1.总框架图 2.2.Iterable 框架图 2.3.Map 框架图 3)List 3.1.ArrayList 类继承 ...

  9. Java集合详解4:HashMap和HashTable

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

最新文章

  1. 想与 Oracle 说“再见”,太难了!
  2. CSDN活跃榜 2019-5-22
  3. onDraw什么时候被调用?
  4. Sql Server之旅——第十三站 深入的探讨锁机制
  5. (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
  6. 10寸 nuc972_新唐ARM9之NUC972学习历程之系统的搭建和BSP包的使用
  7. linux tab 缩进,codemirror TAB 缩进问题记录
  8. 草图大师 2019 破解版|草图大师Sketchup pro 2019中文破解版64位下载 v19.0(附Sketchup 2019破解补丁)
  9. keil添加华大芯片支持jflash下载
  10. 计算机中学期末考试,[探析我国中学计算机教育]计算机基础大一考试题
  11. 【愚公系列】2022年04月 微信小程序-Flex布局详解
  12. 局域网常见攻击方式原理
  13. linux离线安装sails,关于sails 初学者常见问题汇总(示例代码)
  14. 如何修改 gitlab 的项目名称
  15. Fork/Join(分开/联合)
  16. 实时计算 java基础:类的结构之五:内部类
  17. (新 ※必看)解决VMware由于卸载不干净导致安装出现“用户在命令行上发出了 EULAS_AGREED=1,表示不接受许可协议。”
  18. 4个最好的在线漫画生成器,轻松创作漫画
  19. android 霍尔传感器,浅析MTK hall霍尔传感器之原理
  20. linux内核 猪头 作用,漫谈Linux内核哈希表(1)

热门文章

  1. 使用datagrid时json的格式
  2. Can not find the tag library descriptor for /struts-tags问题
  3. 面试常备题---插入排序
  4. TurboMail邮件服务器推动邮件领域的进一步发展
  5. oa提醒模块要素_OA系统进军贸易行业,高效完成CRM管理
  6. 请输入30名同学的c语言成绩,求大神帮忙做这几道结构体的c语言!今天就要交实验报告!急啊急!!!!! (1)一个班级共有30名学...
  7. 今日头条ocpm计费规则_今日头条广告投放推广新产品选OCPM还是CPA好?是新的计费方式吗?...
  8. imageio读取数据后需要关闭吗_关闭汽车自动启停功能后,能更换为普通汽车电瓶吗?有什么影响吗...
  9. 运算符在计算机语言中的作用,深入解析C++编程中范围解析运算符的作用及使用...
  10. 得到多组单选框的值_多组学如何构建预后预测模型,还发了7分+?