python-集合(第二篇(七):集合)
第二篇(七):集合
摘要: 说明: ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现: ·sets支持x in set, len(set)和 for x in set; ·作为一个无序的集合,sets 不记录元素位置或者插入点,因此,sets不支持indexing, slicing,或...
说明:
·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现:
·sets支持x in set, len(set)和 for x in set;
·作为一个无序的集合,sets 不记录元素位置或者插入点,因此,sets不支持indexing, slicing,或其它类序列(sequence-like)的操作;
·学习集合,主要是学习集合的一系列标准操作:集合创建、集合添加、集合删除、交并差集等;
1.创建集合:set()
1
2
3
4
5
6
7
8
9
10
11
|
>>> a = range( 10 ) >>> a [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a.insert( 3 , 8 ) >>> a.insert( 3 , 6 ) >>> a [ 0 , 1 , 2 , 6 , 8 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> set (a) set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) >>> set ( 'boy' ) set ([ 'y' , 'b' , 'o' ]) |
2.集合添加:add()与update
--add()
·功能:把要添加的元素作为一个整体添加到集合中;
·演示如下:
1
2
3
4
5
6
|
>>> a = set ( 'boy' ) >>> a set ([ 'y' , 'b' , 'o' ]) >>> a.add( 'xpleaf' ) >>> a set ([ 'y' , 'b' , 'xpleaf' , 'o' ]) |
·add()的参数不能为列表和字典,但是可以为元组:
1
2
3
4
5
6
|
>>> b = set ( 'Hello' ) >>> b set ([ 'H' , 'e' , 'l' , 'o' ]) >>> b.add(( 'xpleaf' , 'CL' )) >>> b set ([ 'H' , ( 'xpleaf' , 'CL' ), 'e' , 'l' , 'o' ]) |
--update()
·功能:把要添加的元素拆分(如果不是单个字符),再一个一个地添加到集合中;
·演示如下:
1
2
3
4
5
6
7
8
|
>>> a set ([ 'y' , 'b' , 'xpleaf' , 'o' ]) >>> a.update( 'Python' ) >>> a set ([ 'b' , 'h' , 'xpleaf' , 'n' , 'P' , 'o' , 'y' , 't' ]) >>> a.update([ 1 , 2 , 3 ]) >>> a set ([ 1 , 2 , 'b' , 'h' , 'xpleaf' , 'n' , 'P' , 3 , 'o' , 'y' , 't' ]) |
·前面讲集合是不支持indexing的,所以这里看到新添加的元素在集合中是无序排列的;
3.集合删除:remove(),discard()与pop()
--remove()
·功能:从set中删除元素,如果不存在则引发KeyError;
·演示如下:
1
2
3
4
5
6
7
8
9
|
>>> a set ([ 1 , 2 , 'b' , 'h' , 'xpleaf' , 'n' , 'P' , 3 , 'o' , 'y' , 't' ]) >>> a.remove( 'b' ) >>> a set ([ 1 , 2 , 'h' , 'xpleaf' , 'n' , 'P' , 3 , 'o' , 'y' , 't' ]) >>> a.remove( 'KeyError' ) Traceback (most recent call last): File "<stdin>" , line 1 , in <module> KeyError: 'KeyError' |
--discard()
·功能:如果在set中存在该元素,则删除,无论存在与否,都没有提示;
·演示如下:
1
2
3
4
5
6
7
8
9
|
>>> a set ([ 1 , 2 , 3 , 'h' , 'xpleaf' , 'n' , 'P' , 'o' , 'y' , 't' ]) >>> import tab >>> a.discard( 'xpleaf' ) >>> a set ([ 1 , 2 , 3 , 'h' , 'n' , 'P' , 'o' , 'y' , 't' ]) >>> a.discard( 'CL' ) >>> a set ([ 1 , 2 , 3 , 'h' , 'n' , 'P' , 'o' , 'y' , 't' ]) |
--pop()
·功能:删除并返回set中一个不确定的元素;
·演示如下:
1
2
3
4
5
6
7
8
9
10
|
>>> a.pop() 1 >>> a set ([ 2 , 3 , 'h' , 'n' , 'P' , 'o' , 'y' , 't' ]) >>> a.pop() 2 >>> a.pop() 3 >>> a set ([ 'h' , 'n' , 'P' , 'o' , 'y' , 't' ]) |
4.集合数学操作
·进行数学操作需要了解一些集合操作符号和数学符号:
数学符号 | Python符号 | 含义 |
-或\ | - | 差集,相对补集 |
∩ | & | 交集 |
∪ | | | 并集 |
取∩的补 | ^ | 对称差集 |
≠ | != |
不等于 |
= | == | 等于 |
∈ | in | 属于 |
not in | 不属于 |
--差集,相对补集:-
1
2
3
4
5
6
7
8
9
10
|
>>> a = set (range( 10 )) >>> b = set (range( 15 )) >>> a set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) >>> b set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 ]) >>> b - a set ([ 10 , 11 , 12 , 13 , 14 ]) >>> a - b set ([]) |
--交集:&
1
2
|
>>> a & b set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) |
·也可以用intersection()函数实现:
1
2
|
>>> a.intersection(b) set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) |
--并集:|
1
2
|
>>> a | b set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 ]) |
·也可以用union()函数实现:
1
2
|
>>> a.union(b) set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 ]) |
--对称差集:^
1
2
3
4
5
|
set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) >>> b set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 ]) >>> a ^ b set ([ 10 , 11 , 12 , 13 , 14 ]) |
·也可以用symmetric_difference()函数实现:
1
2
3
4
|
>>> a.symmetric_difference(b) set ([ 10 , 11 , 12 , 13 , 14 ]) >>> b.symmetric_difference(a) set ([ 10 , 11 , 12 , 13 , 14 ]) |
--等于与不等于:==与!=
1
2
3
4
|
>>> a == b False >>> a != b True |
--属于与不属于:in与not in
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> a set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) >>> b set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 ]) >>> a in b False >>> b in a False >>> a not in b True >>> 0 in a True |
·指的是元素是否属于集合,而不是集合之间的包含;
·集合之间的包含(子集)可用:>、>=、<、<=等表示
1
2
3
4
|
>>> a >= b False >>> a <= b True |
·<=相当于函数issubset():
1
2
3
4
|
>>> a <= b True >>> a.issubset(b) ===>a是b的子集 True |
·>=相当于函数issuperset():
1
2
3
4
5
6
|
>>> a >= b False >>> a.issuperset(b) ===>a不是b的超集,即a不包含b False >>> b.issuperset(a) ===>b是a的超集,即b包含a True |
5.其它操作
--len()
·功能:测定集合的长度;
·演示如下:
1
2
3
4
|
>>> len(a) 10 >>> len(b) 15 |
--copy()
·功能:浅复制;
·前面已有提及,不再重复;
--hash()
·功能:返回参数的哈希值;
·演示如下:
1
2
3
4
5
6
7
8
|
>>> a set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]) >>> b set ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 ]) >>> hash(a) Traceback (most recent call last): File "<stdin>" , line 1 , in <module> TypeError: unhashable type: 'set' |
·可以看到普通hash()函数的参数不能为set类型(列表也不行),但可以为字符串类型:
1
2
|
>>> hash( 'CL' ) 8576051523077447 |
·只要数据量足够大,hash是有可能产生相同的hash值,更安全的为md5类型的hash值计算:
1
2
3
4
5
|
>>> import hashlib >>> a = 'hello' >>> a = hashlib.md5() >>> a.hexdigest() 'd41d8cd98f00b204e9800998ecf8427e' |
·可以看到产生的hash值中还包含有字母等字符,因此破解的难度会更大。
python-集合(第二篇(七):集合)的更多相关文章
- Python人工智能第二篇:人脸检测和图像识别
Python人工智能第二篇:人脸检测和图像识别 人脸检测 详细内容请看技术文档:https://ai.baidu.com/docs#/Face-Python-SDK/top from aip impo ...
- Java-集合第二篇Set集合
1.Set集合与Collection基本相同,没有提供额外的方法.实际上Set就是Collection,只是行为略有所不同(Set不允许有重复元素). Set下的HashSet.TreeSet.Enu ...
- Python人工智能第二篇
Python人工智能之路 - 第二篇 : 现成的技术 预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w ...
- SVN第二篇-----命令集合
16.switch 代码库URL变更 svn switch (sw): 更新工作副本至不同的URL. 用法: 1.switch URL [PATH] 更新你的工作副本,映射到一个新 ...
- [Python笔记]第二篇:运算符、基本数据类型
本篇主要内容有:运算符 基本数据类型等 一.运算符 1.算术运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 6.身份运算 7.位运算 8.运算符优先级 二.基本数据类型 1.整数:int ...
- python初识第二篇
python 编码: 第一次编程有时候会遇到乱码的情况,就可以通过以下的情况来解决 在Windows中默认的就是gbk编码,如果在代码头两部定义utf-8,系统还会按照系统的方式来定义. python ...
- Python【第二篇】运算符及优先级、数据类型及常用操作、深浅拷贝
一.运算符及优先级 Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 1.算数运算符 运算符 描述 实例,a=20,b=10 + 加 a+b输出结果30 - 减 a-b输出结果 ...
- python基础-第二篇-基本数据类型
一.运算符 1.算数运算: 算数运算符相信大家都不陌生吧,尤其是加减乘除,好!那我就带着大家看看最后三个,这三个到底是干什么玩意的? %,取两数相除的余数,看图: **,x的多少次幂,看图: //,取 ...
- 图解Python 【第二篇】:Python基础2
本节内容一览图 一.数据类型 1.数字 2 是一个整数的例子.长整数 不过是大一些的整数.3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. ...
- Python基础第二篇
一.三元运算 if True: name='a' else: name='b' #上面的代码用三元运算表示: name="a" if True else "b" ...
随机推荐
- 转:etcd:从应用场景到实现原理的全方位解读
原文来自于:http://www.infoq.com/cn/articles/etcd-interpretation-application-scenario-implement-principle ...
- 简单易学的机器学习算法——EM算法
简单易学的机器学习算法——EM算法 一.机器学习中的参数估计问题 在前面的博文中,如“简单易学的机器学习算法——Logistic回归”中,采用了极大似然函数对其模型中的参数进行估计,简单来讲即对于一系 ...
- 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-c
[技术贴]解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法 错误是:Aborting commit: xxxxx' remains ...
- mysql之索引方面的知识点总结
索引的类型: 普通索引:这是最基本的索引类型,没唯一性之类的限制. 唯一性索引:和普通索引基本相同,但所有的索引列只能出现一次,保持唯一性. 主键:主键是一种唯一索引,但必须指定为"PRIM ...
- PuTTY 'modmul()' 函数缓冲区下溢漏洞(CVE-2013-4206)
漏洞版本: PuTTY 0.52 - 0.63 漏洞描述: BUGTRAQ ID: 61645 CVE(CAN) ID: CVE-2013-4206 PuTTY是Windows和Unix平台上的PuT ...
- 字符串(AC自动机):COCI 2015 round 5 divljak
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAy0AAANaCAIAAAALVTQoAAAgAElEQVR4nOy9X2hbx773PXfrQgQjDq
- 开发备必:WEB前端开发规范文档
为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必 须按本文档规范进行前台页面开发. 本文档如有不对或者不合适的地 ...
- Delphi 调试WEBService程序(ISAPI或CGI) 把Web App Debugger executable转换成 ISAPI/NSAPI
1.新建一个web工程,请选中最下面一项:Web App Debugger executable,Coclass name我们设为demo1: 2.在弹出的WebModule2中右击,在弹出的Ac ...
- (经常看看)jdk 设计模式
在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,本文列出了部分JDK中的模式应用实例,有兴趣 ...
- 实现自己的脚本语言ngscript之一:词法分析
正则表达式的理论基础可以参考装配脑袋的 这个 自己动手开发编译器(二)正则语言和正则表达式 这个 自己动手开发编译器(三)有穷自动机 还有这个 自己动手开发编译器(四)利用DFA转换表建立扫描器 如果 ...