Python之集合详解
定义:
1.不同元素组成
2.无序
3.集合中的元素必须是不可变类型
创建集合
s = {1,2,3,4,5,6,7,8}
1.定义可变集合
>>> set_test = set('hello')
>>> set_test
{'h', 'l', 'e', 'o'}
2.定义不可变集合
>>> set_test = set('hello')
>>> set_test
{'h', 'l', 'e', 'o'} # 由此可见集合中的元素不可重复,都是不同的
>>> n_set_test = frozenset(set_test)
>>> n_set_test
frozenset({'h', 'l', 'e', 'o'})
集合运算
集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。
子集
子集,为某个集合中一部分的集合,故亦称部分集合。
使用操作符 < 执行子集操作,同样地,也可使用方法 issubset() 完成。
>>> A = set('abcd')
>>> B = set('cdef')
>>> C = set("ab")
>>> C < A
True # C 是 A 的子集
>>> C < B
False
>>> C.issubset(A)
True
并集
一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。
使用操作符 | 执行并集操作,同样地,也可使用方法 union() 完成。
>>> A | B
{'c', 'b', 'f', 'd', 'e', 'a'}
>>> A.union(B)
{'c', 'b', 'f', 'd', 'e', 'a'}
交集
两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。
使用 & 操作符执行交集操作,同样地,也可使用方法 intersection() 完成。
>>> A & B
{'c', 'd'}
>>> A.intersection(B)
{'c', 'd'}
差集
A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合
使用操作符 - 执行差集操作,同样地,也可使用方法 difference() 完成。
>>> A - B
{'b', 'a'}
>>> A.difference(B)
{'b', 'a'}
对称差
两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。
使用 ^ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。
>>> A ^ B
{'b', 'f', 'e', 'a'}
>>> A.symmetric_difference(B)
{'b', 'f', 'e', 'a'}
集合方法
1.add 向集合中添加元素
>>> s = {1, 2, 3, 4, 5, 6}
>>> s.add("s")
>>> s
{1, 2, 3, 4, 5, 6, 's'}
2.clear 清空集合
>>> s = {1, 2, 3, 4, 5, 6}
>>> s.clear()
>>> s
set()
3.copy 返回集合的浅拷贝
>>> s = {1, 2, 3, 4, 5, 6}
>>> new_s = s.copy()
>>> new_s
{1, 2, 3, 4, 5, 6}
4.pop 删除并返回任意的集合元素(如果集合为空,会引发 KeyError)
>>> s = {1, 2, 3, 4, 5, 6}
>>> s.pop() # pop删除时是无序的随机删除
1
>>> s
{2, 3, 4, 5, 6}
5.remove 删除集合中的一个元素(如果元素不存在,会引发 KeyError)
>>> s = {1, 2, 3, 4, 5, 6}
>>> s.remove(3)
>>> s
{1, 2, 4, 5, 6}
6.discard 删除集合中的一个元素(如果元素不存在,则不执行任何操作)
>>> s = {1, 2, 3, 4, 5, 6}
>>> s.discard("sb")
>>> s
{1, 2, 3, 4, 5, 6}
7.intersection 将两个集合的交集作为一个新集合返回
>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> s.intersection(s2)
{3, 4, 5, 6}
>>> s&s2 # 可以达到相同的效果
{3, 4, 5, 6}
8.union 将集合的并集作为一个新集合返回
>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> print(s.union(s2))
{1, 2, 3, 4, 5, 6, 7, 8}
>>> print(s|s2) # 用 | 可以达到相同效果
{1, 2, 3, 4, 5, 6, 7, 8}
9.difference 将两个或多个集合的差集作为一个新集合返回
>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> print("差集:",s.difference(s2)) # 去除s和s2中相同元素,删除s2 保留s中剩余元素
差集: {1, 2}
>>> print("差集:",s2.difference(s)) # 去除s和s2中相同元素,删除s2 保留s2中剩余元素
差集: {8, 7}
>>> print("差集:",s - s2) # 符号 - 可以达到相同结果
差集: {1, 2}
>>> print("差集:",s2 - s) # 符号 - 可以达到相同结果
差集: {8, 7}
10. symmetric_difference 将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留)
>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> s.symmetric_difference(s2)
{1, 2, 7, 8}
11.update 用自己和另一个的并集来更新这个集合
>>> s = {'p', 'y'}
>>> s.update(['t', 'h', 'o', 'n']) # 添加多个元素
>>> s
{'p', 't', 'o', 'y', 'h', 'n'}
>>> s.update(['H', 'e'], {'l', 'l', 'o'}) # 添加列表和集合
>>> s
{'p', 'H', 't', 'l', 'o', 'y', 'e', 'h', 'n'}
12.intersection_update() 用自己和另一个的交集来更新这个集合
>>> s = {'a', 'b', 'c', 'd', 'q'}
>>> s2 = {'c', 'd', 'e', 'f'}
>>> s.intersection_update(s2) # 相当于s = s - s2
>>> s
{'c', 'd'}
13.isdisjoint() 如果两个集合有一个空交集,返回 True
>>> s = {1, 2}
>>> s1 = {3, 4}
>>> s2 = {2, 3}
>>> s.isdisjoint(s1)
True # s 和 s1 两个集合的交集为空返回 True
>>> s.isdisjoint(s2)
False # s 和 s2 两个集合的交集为 2 不是空 所有返回False
14.issubset() 如果另一个集合包含这个集合,返回 True
>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.issubset(s1)
True # 因为 s1 集合 包含 s 集合
>>> s.issubset(s2)
False # s2 集合 不包含 s 集合
15.issuperset() 如果这个集合包含另一个集合,返回 True
>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.issuperset(s1)
False # s 集合不包含 s1 集合
>>> s.issuperset(s2)
True # s 集合包含 s2 集合
16.difference_update() 从这个集合中删除另一个集合的所有元素
>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.difference_update(s2)
>>> s
{1} # s2中的2,3 s集合中也有2,3 所以保留1
>>> s1.difference_update(s2)
>>> s1
{1, 4}
17.symmetric_difference_update() 用自己和另一个的对称差来更新这个集合
>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s1.symmetric_difference_update(s)
>>> s1
{4}
>>> s1.symmetric_difference_update(s2)
>>> s1
{2, 3, 4}
>>> s.symmetric_difference_update(s2)
>>> s
{1}
集合与内置函数
下述内置函数通常作用于集合,来执行不同的任务。
| 函数 | 描述 |
| all() | 如果集合中的所有元素都是 True(或者集合为空),则返回 True。 |
| any() | 如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。 |
| enumerate() | 返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。 |
| len() | 返回集合的长度(元素个数) |
| max() | 返回集合中的最大项 |
| min() | 返回集合中的最小项 |
| sorted() | 从集合中的元素返回新的排序列表(不排序集合本身) |
| sum() | 返回集合的所有元素之和 |
Python之集合详解的更多相关文章
- Python 字符串方法详解
Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. ...
- Python中dict详解
from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...
- python之数据类型详解
python之数据类型详解 二.列表list (可以存储多个值)(列表内数字不需要加引号) sort s1=[','!'] # s1.sort() # print(s1) -->['!', ' ...
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- Python推导式详解,带你写出比较精简酷炫的代码
Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简介 ...
- Python开发技术详解(视频+源码+文档)
Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
随机推荐
- sqli-labs 1-10关
学习sql注入的必做靶场我终于来尝试一下下了. 第一关 ?id=1'时出现 在测试?id=1' and '1'='1,页面正常 ?id=1' and '1'='2 页面错误 判断存在单引号字符型注入 ...
- win10家庭版启用远程桌面
此电脑右键属性->远程设置->允许远程协助连接这台计算机 勾选 下载RDP Wrapper 地址:https://github.com/stascorp/rdpwrap/releases ...
- 跟我一起学.NetCore之静态文件处理的那些事
前言 如今前后端分离开发模式如火如荼,开发职责更加分明(当然前后端一起搞的模式也没有完全褪去):而对于每个公司产品实施来说,部署模式会稍有差别,有的会单独将前端文件部署为一个站点,有的会将前端文件和后 ...
- 【5】JMicro免费在线消息服务
JMicro是一个用Java语言实现的开源微服务全家桶, 源码地址:https://github.com/mynewworldyyl/jmicro, Demo地址:http://jmicro.cn/. ...
- Java io实现读取文件特殊内容进行替换
最近公司在做一个项目其中一个需求是读取文件中的特殊字符在其后进行添加或删除字符操作,本来想直接使用randomAccessFile按行读取,读取到特殊字符就进行添加或删除操作,但是randomAcce ...
- Devops实战(一)Docker的部署安装以及Docker-Compose的使用
Docker的部署安装以及Docker-Compose的使用 1.docker和docker-Compose简介 Docker是一组平台即服务(PaaS)产品,它们使用操作系统级虚拟化以称为容器的软件 ...
- 微信小程序-实现文字跑马灯-wepy
百度蛮多例子的,但是代码太长懒得看了 前言 要实现跑马灯主要就是获得判断开始定界和结束定界, 1.9.3新增的wxml操作接口 就可以拿到节点长宽等属性,当然你也可以直接用 文字数量 * 文字大小(注 ...
- spring-cloud-starter-openfeign 源码详细讲解
1.测试环境搭建: 1.1 架构图: product服务提供一个接口: order服务通过feign的方式来调用product的接口: order服务需要引入依赖: <dependency> ...
- Centos-归档文件或目录-tar
tar 对文件或者目录进行打包归档成一个文件,不是压缩 相关选项 -c 新建文件 -r 将目标文件追加都档案文件末尾 -t 列出归档文件中已经归档文件列表 -x 从归档文件中还原文件 -u 新文件更新 ...
- Centos-系统任务队列信息-uptime
uptime 显示系统的当前时间.系统从启动到当前运行时间.当前总共在线用户.系统1.5.15分钟负载情况