第二篇(七):集合

 

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
[0123456789]
>>> a.insert(3,8)
>>> a.insert(3,6)
>>> a
[012683456789]
>>> set(a)
set([0123456789])
>>> 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([12'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([12'b''h''xpleaf''n''P'3'o''y''t'])
>>> a.remove('b')
>>> a
set([12'h''xpleaf''n''P'3'o''y''t'])
>>> a.remove('KeyError')
Traceback (most recent call last):
  File "<stdin>", line 1in <module>
KeyError: 'KeyError'

--discard()

·功能:如果在set中存在该元素,则删除,无论存在与否,都没有提示;

·演示如下:

1
2
3
4
5
6
7
8
9
>>> a
set([123'h''xpleaf''n''P''o''y''t'])
>>> import tab
>>> a.discard('xpleaf')
>>> a
set([123'h''n''P''o''y''t'])
>>> a.discard('CL')
>>> a
set([123'h''n''P''o''y''t'])

--pop()

·功能:删除并返回set中一个不确定的元素;

·演示如下:

1
2
3
4
5
6
7
8
9
10
>>> a.pop()
1
>>> a
set([23'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([0123456789])
>>> b
set([01234567891011121314])
>>> b - a
set([1011121314])
>>> a - b
set([])

--交集:&

1
2
>>> a & b
set([0123456789])

·也可以用intersection()函数实现:

1
2
>>> a.intersection(b)
set([0123456789])

--并集:|

1
2
>>> a | b
set([01234567891011121314])

·也可以用union()函数实现:

1
2
>>> a.union(b)
set([01234567891011121314])

--对称差集:^

1
2
3
4
5
set([0123456789])
>>> b
set([01234567891011121314])
>>> a ^ b
set([1011121314])

·也可以用symmetric_difference()函数实现:

1
2
3
4
>>> a.symmetric_difference(b)
set([1011121314])
>>> b.symmetric_difference(a)
set([1011121314])

--等于与不等于:==与!=

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([0123456789])
>>> b
set([01234567891011121314])
>>> 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([0123456789])
>>> b
set([01234567891011121314])
>>> hash(a)
Traceback (most recent call last):
  File "<stdin>", line 1in <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-集合(第二篇(七):集合)的更多相关文章

  1. Python人工智能第二篇:人脸检测和图像识别

    Python人工智能第二篇:人脸检测和图像识别 人脸检测 详细内容请看技术文档:https://ai.baidu.com/docs#/Face-Python-SDK/top from aip impo ...

  2. Java-集合第二篇Set集合

    1.Set集合与Collection基本相同,没有提供额外的方法.实际上Set就是Collection,只是行为略有所不同(Set不允许有重复元素). Set下的HashSet.TreeSet.Enu ...

  3. Python人工智能第二篇

    Python人工智能之路 - 第二篇 : 现成的技术   预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w ...

  4. SVN第二篇-----命令集合

    16.switch  代码库URL变更 svn switch (sw): 更新工作副本至不同的URL. 用法:  1.switch URL [PATH]         更新你的工作副本,映射到一个新 ...

  5. [Python笔记]第二篇:运算符、基本数据类型

    本篇主要内容有:运算符 基本数据类型等 一.运算符 1.算术运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 6.身份运算 7.位运算 8.运算符优先级 二.基本数据类型 1.整数:int ...

  6. python初识第二篇

    python 编码: 第一次编程有时候会遇到乱码的情况,就可以通过以下的情况来解决 在Windows中默认的就是gbk编码,如果在代码头两部定义utf-8,系统还会按照系统的方式来定义. python ...

  7. Python【第二篇】运算符及优先级、数据类型及常用操作、深浅拷贝

    一.运算符及优先级 Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 1.算数运算符 运算符 描述 实例,a=20,b=10 + 加 a+b输出结果30 - 减 a-b输出结果 ...

  8. python基础-第二篇-基本数据类型

    一.运算符 1.算数运算: 算数运算符相信大家都不陌生吧,尤其是加减乘除,好!那我就带着大家看看最后三个,这三个到底是干什么玩意的? %,取两数相除的余数,看图: **,x的多少次幂,看图: //,取 ...

  9. 图解Python 【第二篇】:Python基础2

    本节内容一览图 一.数据类型 1.数字 2 是一个整数的例子.长整数 不过是大一些的整数.3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. ...

  10. Python基础第二篇

    一.三元运算 if True: name='a' else: name='b' #上面的代码用三元运算表示: name="a" if True else "b" ...

随机推荐

  1. php mysql PDO使用

    <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttri ...

  2. Delphi能通过SSH登录Linux,连接MYSQL取数么?像Navicat一样

    百度随时就能搜,你就懒得搜下.http://tieba.baidu.com/p/671327617 Ssh tunnel通常能实现3种功能1) 加密网络传输2) 绕过防火墙3) 让位于广域网的机器连接 ...

  3. 14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering

    14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering 当插入,更新,和删除操作在表上执行, 索引列的值(特别是 se ...

  4. 【转】Android Fragment 基本介绍--不错

    原文网址:http://www.cnblogs.com/mengdd/archive/2013/01/08/2851368.html Fragment Android是在Android 3.0 (AP ...

  5. 在C#中使用WIA获取扫描仪数据

    WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪.数码相机)中获取静态图像,以及管理这些设备.它既是 ...

  6. jquery-pager分页

    首先引用这三个文件 <script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript&qu ...

  7. Linux给用户增加sudo权限

    有时候我们在Linux下执行sudo的时候,出现 xxx is not int the sudoers file 告诉我们当前用户不是sudoer,所以我们要把当前用户添加进去,步骤如下: 1.进入超 ...

  8. Android学习笔记(二)Manifest文件节点详解

    在上一篇博文中简单介绍了Manifest文件及其存放位置,本篇就来详细介绍一下Manifest文件中的节点和一些节点的基本作用,首先看一下Manifest文件最基本的结构: <manifest ...

  9. iOS中控件的Frame属性和Bounds属性的区别

    在iOS中,每个控件都是继承于UIView的,都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性 frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父 ...

  10. iOS屏蔽高频点击技巧

    例如高频率点击一个按钮或者TableViewCell,会造成功能多次重复执行,在异步网络请求时候或者多线程时候,造成的问题尤其明显. 解决方法: 声明一个属性self.actionWorking ,标 ...