python的官网里对集合的描述是:

Python also includes a data type for sets. A set is an unordered collection with no duplicate elements. Basic uses include membership testing and eliminating duplicate entries. Set objects also support mathematical operations like union, intersection, difference, and symmetric difference.

Python还包括用于集合的数据类型。集合是没有重复元素的无序容器。基本用法包括成员资格测试和消除重复条目。集合对象也支持数学运算,如并,交,差和对称差。

特点:

  • 集合是一个无序的,不重复的数据组合
  • 把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

1、创建

用花括号或者set()函数可以用来创建集合。注意,你必须使用set()创建一个空的集合,而不能用{},后面这种写法创建一个空的字典

实例:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}  # 用花括号的方式创建一个集合

set2 = set('abracadabra')  # 用set()的方式创建一个集合

set3 = set()  # 创建一个空的集合

print(basket)

以上代码,输出:

{'banana', 'orange', 'apple', 'pear'}

细心对照一下,你会发现,自动去除了重复,值得一提的是显示的顺序并不表示Sets是有序的

2、添加元素

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}  # 用花括号的方式创建一个集合
print('原来的basket:', basket) basket.add('apple') # 添加一个重复的
print('添加一个重复项后:', basket) basket.add('watermelon') # 添加一个不重复的
print('添加一个不重复项后:', basket)

以上代码,输出:

原来的basket: {'apple', 'banana', 'pear', 'orange'}
添加一个重复项后: {'apple', 'banana', 'pear', 'orange'}
添加一个不重复项后: {'banana', 'apple', 'watermelon', 'orange', 'pear'}

3、删除元素

可通过remove(key)方法可以删除元素:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}  # 用花括号的方式创建一个集合
print('原来的basket:', basket) basket.remove('apple') # 删除 'apple'
print('删除 \'apple\':', basket)

以上代码,输出:

原来的basket: {'apple', 'pear', 'banana', 'orange'}
删除 'apple': {'pear', 'banana', 'orange'}

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,我们通过实例来演示:

A = {'apple', 'orange',  'pear',  'banana'}  # 用花括号的方式创建一个集合
B = {'apple', 'orange', 'watermelon'}
C = {'apple', 'orange'}
D = {'c++', 'python'} print('集合A:', A)
print('集合B:', B) print('A、B的交集:', A.intersection(B)) # 交集
print('A、B的并集:', A.union(B)) # 并集
print('A、B的差集:', A.difference(B)) # 差集 (项在A中,但不在B中)
print('A、B的对称差集:', A.symmetric_difference(B)) # 对称差集(项在A或B中,但不会同时出现在二者中) # 子集(判断A是否包含了B里面的所有值)
print('B是A的子集?', B.issubset(A))
print('C是A的子集?', C.issubset(A)) # 父集(判断A是否为B的父集)
print('A是B的父集?', A.issuperset(B))
print('A是C的父集?', A.issuperset(C)) # 无交集(判断两个集合是否完全没有任何交集)
print('A与D是否有交集?', A.isdisjoint(D))
print('A与B是否有交集?', A.isdisjoint(B)) print() # 输出空行
print() # 输出空行
print('另一种写法')
print('集合A:', A)
print('集合B:', B) # 另一种写法
print('A、B的交集 => A & B:', A & B) # 交集
print('A、B的并集 => A | B:', A | B) # 并集
print('A、B的差集 => A - B:', A - B) # 差集(项在A中,但不在B中)
print('A、B的对称差集 => A ^ B:', A ^ B) # 对称差集(项在A或B中,但不会同时出现在二者中)

以上代码,输出:

集合A: {'apple', 'orange', 'pear', 'banana'}
集合B: {'apple', 'orange', 'watermelon'}
A、B的交集: {'apple', 'orange'}
A、B的并集: {'apple', 'watermelon', 'pear', 'orange', 'banana'}
A、B的差集: {'pear', 'banana'}
A、B的对称差集: {'watermelon', 'pear', 'banana'}
B是A的子集? False
C是A的子集? True
A是B的父集? False
A是C的父集? True
A与D是否有交集? True
A与B是否有交集? False 另一种写法
集合A: {'apple', 'orange', 'pear', 'banana'}
集合B: {'apple', 'orange', 'watermelon'}
A、B的交集 => A & B: {'apple', 'orange'}
A、B的并集 => A | B: {'apple', 'watermelon', 'pear', 'orange', 'banana'}
A、B的差集 => A - B: {'pear', 'banana'}
A、B的对称差集 => A ^ B: {'watermelon', 'pear', 'banana'}

python3 第十五章 - 数据类型之Sets(集合)的更多相关文章

  1. python3 第十四章 - 数据类型之Dictionary(字典)

    在python中字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下 ...

  2. python3 第十二章 - 数据类型之List(列表)

    Python内置的一种数据类型是列表:list. list是一种有序的集合 可以随时添加和删除其中的元素. 它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只 ...

  3. python3 第二十五章 - comprehensions(推导式)

    推导式(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(list)推导式 字典(dict) ...

  4. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  5. 15第十五章UDF用户自定义函数(转载)

    15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布

  6. 《Linux命令行与shell脚本编程大全》 第十五章 学习笔记

    第十五章:控制脚本 处理信号 重温Linux信号 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能 ...

  7. CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章

    第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...

  8. Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  9. Gradle 1.12 翻译——第十五章. 任务详述

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

随机推荐

  1. QQ音乐API-借他人之力实现我的音乐盒

    好久没有写博客了,最近升级做爸爸了,很开心的事情.内心又很忧郁,怎么能给媳妇和儿子一个相对好的物质经济条件.现在什么都没有的我,至少还有你们. 话不多说了,这篇博客还是和自己用vue做web app相 ...

  2. fastdfs集群

    高可用的两大目的:数据备份,数据分片 1.FastDFS安装配置 先配置一台,将其中的配置文件打包,下载,然后配置其他机器时只需要解压即可, 打包命令 然后下载,上传到其他机器相对应的/etc目录下 ...

  3. FFmpeg AVPacket

    AVPacket注解 AVPacket 是一个结构体,存储压缩数据.可作为编码器的输出,解码器的输入. 对于 Video 一般包含一个压缩帧,对于 Audio 可能包含多个压缩帧. 编码器允许输出空 ...

  4. JS文本框每隔4个数字加一个空格,银行卡号文本框

    <input type="text" onkeypress="return (function(key,that){return (key>47&&a ...

  5. SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

    前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...

  6. iphone微信后退不刷新的问题

    查看了很多解决ios微信返回不刷新页面的文章,大部分都是利用H5的新特性history来进行解决的,而且很多人的想法都是用了pushstate和popstate来实现了这个功能,但是用pushstat ...

  7. node 和git 在linux(centos) 上的安装

    1. wget命令下载Node.js安装包.  (该安装包是编译好的文件,解压之后,在bin文件夹中就已存在node和npm,无需重复编译.) wget https://nodejs.org/dist ...

  8. struts2中配置文件的调用顺序

    1.default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2中 2.struts-default.xml 该文件保存在 ...

  9. JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别

    一.包装类 Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足, 在设计类时为每个基本数据类型设计了一个对应的类进行代表,这 ...

  10. CTF---编程入门第一题 循环

    循环分值:10 来源: 北邮天枢战队 难度:易 参与人数:1478人 Get Flag:467人 答题人数:523人 解题通过率:89% 给出一个循环公式,对于一个整数n,当n为奇数时,n=3n+1, ...