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')>>> aset(['y', 'b', 'o'])>>> a.add('xpleaf')>>> aset(['y', 'b', 'xpleaf', 'o']) |
·add()的参数不能为列表和字典,但是可以为元组:
|
1
2
3
4
5
6
|
>>> b = set('Hello')>>> bset(['H', 'e', 'l', 'o'])>>> b.add(('xpleaf','CL'))>>> bset(['H', ('xpleaf', 'CL'), 'e', 'l', 'o']) |
--update()
·功能:把要添加的元素拆分(如果不是单个字符),再一个一个地添加到集合中;
·演示如下:
|
1
2
3
4
5
6
7
8
|
>>> aset(['y', 'b', 'xpleaf', 'o'])>>> a.update('Python')>>> aset(['b', 'h', 'xpleaf', 'n', 'P', 'o', 'y', 't'])>>> a.update([1,2,3])>>> aset([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
|
>>> aset([1, 2, 'b', 'h', 'xpleaf', 'n', 'P', 3, 'o', 'y', 't'])>>> a.remove('b')>>> aset([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
|
>>> aset([1, 2, 3, 'h', 'xpleaf', 'n', 'P', 'o', 'y', 't'])>>> import tab>>> a.discard('xpleaf')>>> aset([1, 2, 3, 'h', 'n', 'P', 'o', 'y', 't'])>>> a.discard('CL')>>> aset([1, 2, 3, 'h', 'n', 'P', 'o', 'y', 't']) |
--pop()
·功能:删除并返回set中一个不确定的元素;
·演示如下:
|
1
2
3
4
5
6
7
8
9
10
|
>>> a.pop()1>>> aset([2, 3, 'h', 'n', 'P', 'o', 'y', 't'])>>> a.pop()2>>> a.pop()3>>> aset(['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))>>> aset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> bset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])>>> b - aset([10, 11, 12, 13, 14])>>> a - bset([]) |
--交集:&
|
1
2
|
>>> a & bset([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 | bset([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])>>> bset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])>>> a ^ bset([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 == bFalse>>> a != bTrue |
--属于与不属于:in与not in
|
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> aset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> bset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])>>> a in bFalse>>> b in aFalse>>> a not in bTrue>>> 0 in aTrue |
·指的是元素是否属于集合,而不是集合之间的包含;
·集合之间的包含(子集)可用:>、>=、<、<=等表示
|
1
2
3
4
|
>>> a >= bFalse>>> a <= bTrue |
·<=相当于函数issubset():
|
1
2
3
4
|
>>> a <= bTrue>>> a.issubset(b) ===>a是b的子集True |
·>=相当于函数issuperset():
|
1
2
3
4
5
6
|
>>> a >= bFalse>>> a.issuperset(b) ===>a不是b的超集,即a不包含bFalse>>> b.issuperset(a) ===>b是a的超集,即b包含aTrue |
5.其它操作
--len()
·功能:测定集合的长度;
·演示如下:
|
1
2
3
4
|
>>> len(a)10>>> len(b)15 |
--copy()
·功能:浅复制;
·前面已有提及,不再重复;
--hash()
·功能:返回参数的哈希值;
·演示如下:
|
1
2
3
4
5
6
7
8
|
>>> aset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> bset([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" ...
随机推荐
- php mysql PDO使用
<?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttri ...
- Delphi能通过SSH登录Linux,连接MYSQL取数么?像Navicat一样
百度随时就能搜,你就懒得搜下.http://tieba.baidu.com/p/671327617 Ssh tunnel通常能实现3种功能1) 加密网络传输2) 绕过防火墙3) 让位于广域网的机器连接 ...
- 14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering 当插入,更新,和删除操作在表上执行, 索引列的值(特别是 se ...
- 【转】Android Fragment 基本介绍--不错
原文网址:http://www.cnblogs.com/mengdd/archive/2013/01/08/2851368.html Fragment Android是在Android 3.0 (AP ...
- 在C#中使用WIA获取扫描仪数据
WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪.数码相机)中获取静态图像,以及管理这些设备.它既是 ...
- jquery-pager分页
首先引用这三个文件 <script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript&qu ...
- Linux给用户增加sudo权限
有时候我们在Linux下执行sudo的时候,出现 xxx is not int the sudoers file 告诉我们当前用户不是sudoer,所以我们要把当前用户添加进去,步骤如下: 1.进入超 ...
- Android学习笔记(二)Manifest文件节点详解
在上一篇博文中简单介绍了Manifest文件及其存放位置,本篇就来详细介绍一下Manifest文件中的节点和一些节点的基本作用,首先看一下Manifest文件最基本的结构: <manifest ...
- iOS中控件的Frame属性和Bounds属性的区别
在iOS中,每个控件都是继承于UIView的,都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性 frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父 ...
- iOS屏蔽高频点击技巧
例如高频率点击一个按钮或者TableViewCell,会造成功能多次重复执行,在异步网络请求时候或者多线程时候,造成的问题尤其明显. 解决方法: 声明一个属性self.actionWorking ,标 ...