【Python之旅】第二篇(七):集合
说明:
·类似于数学中学的集合,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
Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- Python学习【第二篇】 : Python入门
Python安装 Hello World 字符编码 变量 用户输入 模块初识 .pyc是个什么? 数据类型 数据运算 表达式if ...else语句 表达式for 循环 break and conti ...
- 【Python之旅】第七篇(二):Redis使用基础
0.说明 由于学习开发监控软件的需要,因此需要使用到Redis,这里简单介绍. 注意,使用的环境为:Ubuntu 15.10 1.安装 可以采用源码安装,也可以采用apt-get来安装,都比较简单. ...
- python redis 订阅发布_【Python之旅】第七篇(三):使用Redis订阅服务
在C/S架构中,可以充分地利用Redis订阅服务,实现服务器端和客户端的信息收发,下面说说在Python中如何使用Redistribute的订阅服务. 这里要举的例子是,Server端进行服务的订阅, ...
- Python开发【第二篇】:基础数据类型
内容概要 格式化输出 运算符 编码 基本数据类型 深浅拷贝.小数据池 1.格式化输出 # %s 占位字符串. 实际上可以占位任何东西(用的最多的) # %d 占位整数. 只能占位数字 # name = ...
- python编程可视化小程序_人人都可以写的可视化Python小程序第二篇:旋转的烟花...
兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...
- 使用python完成的一个烟花小程序-人人都可以写的可视化Python小程序第二篇:旋转的烟花...
兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...
- Python之路(第二篇):Python基本数据类型字符串(一)
一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...
- Python开发【第二篇】:Python基本数据类型
运算符 设定:a=10,b=20 . 算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**3 ...
最新文章
- OpenCV图像梯度(Sobel和Scharr)
- 李宏毅机器学习笔记(三)——Regression: output a scalar amp;amp; Gradient Descent
- [原创]用命令行工具删除TFS2010服务器上的工作区信息
- 收藏:SqlServer
- KeyMob聚合平台--国内口碑最好的移动广告聚合平台
- leetcode 219. 存在重复元素 II(规定步长)
- linux rootfs编译进内核,九鼎x6818开发板笔记:uboot、kernel、rootfs编译和烧写
- [MEGA DEAL]完整的Java编程训练营(94%折扣)
- 同样存10万元 换种方式存钱让你利息增加6倍
- sql注入空格被过滤_网站渗透:SQL注入与WAF绕过思路分享
- scala之Akka的Actor模型(上)
- 配置 SQL Server 2005 以允许远程连接(服务器端)
- jquery.blockUI.2.31.js 弹出层项目介绍
- linux 有个文件删不掉,Linux下删除不掉的文件
- wordpress mysql缓存_【新功能】wordpress数据库缓存功能介绍和教程
- 我是一只可可爱爱的小粽子
- 未来教育python全程班百度云_2019、3未来教育等级考试
- 南京大学计算机科学与技术系罗金宇,2017年南京大学计算机科学与技术系硕士研究生复试名单...
- CVPR 2018 | Spotlight论文:单摄像头数秒构建3D人体模型
- 社会保险信息管理系统
热门文章
- C++ 使用VS2010创建MFC ActiveX工程项目
- 服务器系统怎么找便签,Win10电脑怎么找回便签记录?如何恢复误删的内容?
- PTA数据结构期末练习 - 单选题、判断题
- C语言变量d的定义法则,C语言变量命名规则(3页)-原创力文档
- mysql用any查询_mysql 5.6有ANY_VALUE功能吗?
- api 微信内置浏览器js_微信小程序和HTML的区别
- Linux 免密登录和配置环境变量
- 如何查看 Linux 中所有正在运行的服务
- “use strict” 严格模式使用(前端基础系列)
- Ajax--同源策略,jsonp跨域传输原理(callback),