说明:

·类似于数学中学的集合,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

    Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为 ...

  2. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  3. Python学习【第二篇】 : Python入门

    Python安装 Hello World 字符编码 变量 用户输入 模块初识 .pyc是个什么? 数据类型 数据运算 表达式if ...else语句 表达式for 循环 break and conti ...

  4. 【Python之旅】第七篇(二):Redis使用基础

    0.说明 由于学习开发监控软件的需要,因此需要使用到Redis,这里简单介绍. 注意,使用的环境为:Ubuntu 15.10 1.安装 可以采用源码安装,也可以采用apt-get来安装,都比较简单. ...

  5. python redis 订阅发布_【Python之旅】第七篇(三):使用Redis订阅服务

    在C/S架构中,可以充分地利用Redis订阅服务,实现服务器端和客户端的信息收发,下面说说在Python中如何使用Redistribute的订阅服务. 这里要举的例子是,Server端进行服务的订阅, ...

  6. Python开发【第二篇】:基础数据类型

    内容概要 格式化输出 运算符 编码 基本数据类型 深浅拷贝.小数据池 1.格式化输出 # %s 占位字符串. 实际上可以占位任何东西(用的最多的) # %d 占位整数. 只能占位数字 # name = ...

  7. python编程可视化小程序_人人都可以写的可视化Python小程序第二篇:旋转的烟花...

    兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...

  8. 使用python完成的一个烟花小程序-人人都可以写的可视化Python小程序第二篇:旋转的烟花...

    兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...

  9. Python之路(第二篇):Python基本数据类型字符串(一)

    一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...

  10. Python开发【第二篇】:Python基本数据类型

    运算符 设定:a=10,b=20 . 算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**3 ...

最新文章

  1. OpenCV图像梯度(Sobel和Scharr)
  2. 李宏毅机器学习笔记(三)——Regression: output a scalar amp;amp; Gradient Descent
  3. [原创]用命令行工具删除TFS2010服务器上的工作区信息
  4. 收藏:SqlServer
  5. KeyMob聚合平台--国内口碑最好的移动广告聚合平台
  6. leetcode 219. 存在重复元素 II(规定步长)
  7. linux rootfs编译进内核,九鼎x6818开发板笔记:uboot、kernel、rootfs编译和烧写
  8. [MEGA DEAL]完整的Java编程训练营(94%折扣)
  9. 同样存10万元 换种方式存钱让你利息增加6倍
  10. sql注入空格被过滤_网站渗透:SQL注入与WAF绕过思路分享
  11. scala之Akka的Actor模型(上)
  12. 配置 SQL Server 2005 以允许远程连接(服务器端)
  13. jquery.blockUI.2.31.js 弹出层项目介绍
  14. linux 有个文件删不掉,Linux下删除不掉的文件
  15. wordpress mysql缓存_【新功能】wordpress数据库缓存功能介绍和教程
  16. 我是一只可可爱爱的小粽子
  17. 未来教育python全程班百度云_2019、3未来教育等级考试
  18. 南京大学计算机科学与技术系罗金宇,2017年南京大学计算机科学与技术系硕士研究生复试名单...
  19. CVPR 2018 | Spotlight论文:单摄像头数秒构建3D人体模型
  20. 社会保险信息管理系统

热门文章

  1. C++ 使用VS2010创建MFC ActiveX工程项目
  2. 服务器系统怎么找便签,Win10电脑怎么找回便签记录?如何恢复误删的内容?
  3. PTA数据结构期末练习 - 单选题、判断题
  4. C语言变量d的定义法则,C语言变量命名规则(3页)-原创力文档
  5. mysql用any查询_mysql 5.6有ANY_VALUE功能吗?
  6. api 微信内置浏览器js_微信小程序和HTML的区别
  7. Linux 免密登录和配置环境变量
  8. 如何查看 Linux 中所有正在运行的服务
  9. “use strict” 严格模式使用(前端基础系列)
  10. Ajax--同源策略,jsonp跨域传输原理(callback),