定义:

1.不同元素组成

2.无序

3.集合中的元素必须是不可变类型

创建集合

  1. s = {1,2,3,4,5,6,7,8}

1.定义可变集合

  1. >>> set_test = set('hello')
  2. >>> set_test
  3. {'h', 'l', 'e', 'o'}

2.定义不可变集合

  1. >>> set_test = set('hello')
  2. >>> set_test
  3. {'h', 'l', 'e', 'o'}  # 由此可见集合中的元素不可重复,都是不同的
  4. >>> n_set_test = frozenset(set_test)
  5. >>> n_set_test
  6. frozenset({'h', 'l', 'e', 'o'})

 

集合运算

集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。

子集

  子集,为某个集合中一部分的集合,故亦称部分集合。

  使用操作符 < 执行子集操作,同样地,也可使用方法 issubset() 完成。

  1. >>> A = set('abcd')
  2. >>> B = set('cdef')
  3. >>> C = set("ab")
  4. >>> C < A
  5. True # C 是 A 的子集
  6. >>> C < B
  7. False
  8. >>> C.issubset(A)
  9. True

  

并集 

  一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。

  使用操作符 | 执行并集操作,同样地,也可使用方法 union() 完成。

  1. >>> A | B
  2. {'c', 'b', 'f', 'd', 'e', 'a'}
  3. >>> A.union(B)
  4. {'c', 'b', 'f', 'd', 'e', 'a'}

  

交集

  两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。

  使用 & 操作符执行交集操作,同样地,也可使用方法 intersection() 完成。

  1. >>> A & B
  2. {'c', 'd'}
  3. >>> A.intersection(B)
  4. {'c', 'd'}

  

差集

  A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合

  使用操作符 - 执行差集操作,同样地,也可使用方法 difference() 完成。

  1. >>> A - B
  2. {'b', 'a'}
  3. >>> A.difference(B)
  4. {'b', 'a'}

  

对称差

  两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。

  使用 ^ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。

  1. >>> A ^ B
  2. {'b', 'f', 'e', 'a'}
  3. >>> A.symmetric_difference(B)
  4. {'b', 'f', 'e', 'a'}

  

集合方法

1.add 向集合中添加元素

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.add("s")
  3. >>> s
  4. {1, 2, 3, 4, 5, 6, 's'}

2.clear 清空集合

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.clear()
  3. >>> s
  4. set()

3.copy 返回集合的浅拷贝

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> new_s = s.copy()
  3. >>> new_s
  4. {1, 2, 3, 4, 5, 6}

4.pop 删除并返回任意的集合元素(如果集合为空,会引发 KeyError)

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.pop()  # pop删除时是无序的随机删除
  3. 1
  4. >>> s
  5. {2, 3, 4, 5, 6}

5.remove 删除集合中的一个元素(如果元素不存在,会引发 KeyError)

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.remove(3)
  3. >>> s
  4. {1, 2, 4, 5, 6}

6.discard 删除集合中的一个元素(如果元素不存在,则不执行任何操作)

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.discard("sb")
  3. >>> s
  4. {1, 2, 3, 4, 5, 6}

7.intersection 将两个集合的交集作为一个新集合返回

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> s.intersection(s2)
  4. {3, 4, 5, 6}
  5. >>> s&s2  # 可以达到相同的效果
  6. {3, 4, 5, 6}

8.union 将集合的并集作为一个新集合返回

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> print(s.union(s2))
  4. {1, 2, 3, 4, 5, 6, 7, 8}
  5. >>> print(s|s2) # 用 | 可以达到相同效果
  6. {1, 2, 3, 4, 5, 6, 7, 8}

9.difference 将两个或多个集合的差集作为一个新集合返回

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> print("差集:",s.difference(s2)) # 去除s和s2中相同元素,删除s2 保留s中剩余元素
  4. 差集: {1, 2}
  5. >>> print("差集:",s2.difference(s))  # 去除s和s2中相同元素,删除s2 保留s2中剩余元素<br>
  6. 差集: {8, 7}
  7. >>> print("差集:",s - s2) # 符号 - 可以达到相同结果
  8. 差集: {1, 2}
  9. >>> print("差集:",s2 - s) # 符号 - 可以达到相同结果
  10. 差集: {8, 7}

10. symmetric_difference 将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留)

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> s.symmetric_difference(s2)
  4. {1, 2, 7, 8}

11.update 用自己和另一个的并集来更新这个集合

  1. >>> s = {'p', 'y'}
  2. >>> s.update(['t', 'h', 'o', 'n']) # 添加多个元素
  3. >>> s
  4. {'p', 't', 'o', 'y', 'h', 'n'}
  5. >>> s.update(['H', 'e'], {'l', 'l', 'o'}) # 添加列表和集合
  6. >>> s
  7. {'p', 'H', 't', 'l', 'o', 'y', 'e', 'h', 'n'}

12.intersection_update()  用自己和另一个的交集来更新这个集合

  1. >>> s = {'a', 'b', 'c', 'd', 'q'}
  2. >>> s2 = {'c', 'd', 'e', 'f'}
  3. >>> s.intersection_update(s2) # 相当于s = s - s2
  4. >>> s
  5. {'c', 'd'}

13.isdisjoint()  如果两个集合有一个空交集,返回 True

  1. >>> s = {1, 2}
  2. >>> s1 = {3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.isdisjoint(s1)
  5. True # s 和 s1 两个集合的交集为空返回 True
  6. >>> s.isdisjoint(s2)
  7. False # s 和 s2 两个集合的交集为 2 不是空 所有返回False

14.issubset() 如果另一个集合包含这个集合,返回 True

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.issubset(s1)
  5. True # 因为 s1 集合 包含 s 集合
  6. >>> s.issubset(s2)
  7. False # s2 集合 不包含 s 集合

15.issuperset()  如果这个集合包含另一个集合,返回 True

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.issuperset(s1)
  5. False # s 集合不包含 s1 集合
  6. >>> s.issuperset(s2)
  7. True # s 集合包含 s2 集合

16.difference_update() 从这个集合中删除另一个集合的所有元素

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.difference_update(s2)
  5. >>> s
  6. {1} # s2中的2,3 s集合中也有2,3 所以保留1
  7. >>> s1.difference_update(s2)
  8. >>> s1
  9. {1, 4}
  10.   

17.symmetric_difference_update() 用自己和另一个的对称差来更新这个集合

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s1.symmetric_difference_update(s)
  5. >>> s1
  6. {4}
  7. >>> s1.symmetric_difference_update(s2)
  8. >>> s1
  9. {2, 3, 4}
  10. >>> s.symmetric_difference_update(s2)
  11. >>> s
  12. {1}

集合与内置函数

下述内置函数通常作用于集合,来执行不同的任务。

函数 描述
all() 如果集合中的所有元素都是 True(或者集合为空),则返回 True。
any() 如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。
enumerate() 返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。
len() 返回集合的长度(元素个数)
max() 返回集合中的最大项
min() 返回集合中的最小项
sorted() 从集合中的元素返回新的排序列表(不排序集合本身)
sum() 返回集合的所有元素之和

(十三)python 3 集合的更多相关文章

  1. 十三. Python基础(13)--生成器进阶

    十三. Python基础(13)--生成器进阶 1 ● send()方法 generator.send(value) Resumes the execution, and "sends&qu ...

  2. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  3. Python 3 集合基础和概念!

    Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...

  4. Python的集合

    1. Python的集合 1.1 集合的定义 在Python中, 集合set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.Python中的集合set类 ...

  5. Python 操作集合

    Python 操作集合 集合,set,主要用于数据的关系测试和去重处理,和列表类似,可以存储数据,列表中可以存储重复的数据,但是如果转化为集合之后,数据就会进行去重,然后保留唯一值:关系测试就是求多个 ...

  6. Python中集合set()的使用及处理

    在Python中集合(set)与字典(dict)比较相似,都具有无序以及元素不能重复的特点 1.创建set 创建set需要一个list或者tuple或者dict作为输入集合 重复的元素在set中会被自 ...

  7. 二十三. Python基础(23)--经典类和新式类

    二十三. Python基础(23)--经典类和新式类 ●知识框架   ●接口类&抽象类的实现 # 接口类&抽象类的实现 #①抛出异常法 class Parent(object):    ...

  8. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  9. Python:集合操作总结

    集合是一组无序排列的不重复元素集 [注]:集合的最大作用是对一个序列进行去重操作 一.集合的分类 在Python中集合分为两类,为可变集合(set)和不可变集合(frozenset).对于可变集合(s ...

随机推荐

  1. bzoj 3779: 重组病毒【LCT+线段树维护dfs序】

    %.8lf会WA!!%.8lf会WA!!%.8lf会WA!!要%.10lf!! 和4817有点像,但是更复杂. 首先对于操作一"在编号为x的计算机中植入病毒的一个新变种,在植入一个新变种时, ...

  2. UTF-8格式的文本文件程序读取异常

    最近在windows服务器上直接创建并手打输入配置参数,比如设置概率0.6,然后用java程序打开读取该参数,在本地linux环境下测试完全正常,但是一放到服务器上,就报NotNumber错误,查看了 ...

  3. Golang bash脚本自动创建一个go工程

    原作者的代码里面,存在智能引号问题,所以他的代码并不能正常运行: 这个是我微调后的版本. 代码如下: #!/bin/bash #————————————– # Module : mk_go_pro.s ...

  4. maven学习-搭建环境

    1.Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 2.下载: maven.apache.org 3.bin目录包含mvn的运行脚本: ...

  5. [poj3744] Scout YYF I【概率dp 数学期望】

    传送门:http://poj.org/problem?id=3744 令f(i)表示到i,安全的概率.则f(i) = f(i - 1) * p + f(i - 2) * (1 - p),若i位置有地雷 ...

  6. bzoj1233 [Usaco2009Open]干草堆tower 【单调队列dp】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1233 单调队列优化的第一题,搞了好久啊,跟一开始入手斜率优化时感觉差不多... 这一题想通了 ...

  7. 暴力 hihoCoder 1178 计数

    题目传送门 /* 暴力:这题真是醉了,直接暴力竟然就可以了!复杂度不会分析,不敢写暴力程序.. 枚举x,在不重复的情况下+ans,超过范围直接break */ #include <cstdio& ...

  8. [转]linux之date命令MYSQL用户管理

    转自:http://www.cnblogs.com/hencehong/archive/2013/03/19/mysql_user.html 一.        用户登录 格式: mysql -h主机 ...

  9. Webform 三级联动例子

    首先分别做三个下拉列表 <body> <form id="form1" runat="server"> <asp:DropDown ...

  10. 依赖注入(IOC) 详解

    https://blog.csdn.net/qq_27093465/article/details/52547290 https://blog.csdn.net/qq_27093465/article ...