【Python之旅】第二篇(七):集合

说明:

·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现:

·sets支持x in set, len(set)和 for x in set;

·作为一个无序的集合,sets 不记录元素位置或者插入点,因此,sets不支持indexing, slicing,或其它类序列(sequence-like)的操作;

·学习集合,主要是学习集合的一系列标准操作:集合创建、集合添加、集合删除、交并差集等;



1.创建集合:set()

>>> 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()

·功能:把要添加的元素作为一个整体添加到集合中;

·演示如下:

>>> a = set(‘boy‘)
>>> a
set([‘y‘, ‘b‘, ‘o‘])
>>> a.add(‘xpleaf‘)
>>> a
set([‘y‘, ‘b‘, ‘xpleaf‘, ‘o‘])

·add()的参数不能为列表和字典,但是可以为元组:

>>> b = set(‘Hello‘)
>>> b
set([‘H‘, ‘e‘, ‘l‘, ‘o‘])
>>> b.add((‘xpleaf‘,‘CL‘))
>>> b
set([‘H‘, (‘xpleaf‘, ‘CL‘), ‘e‘, ‘l‘, ‘o‘])

--update()

·功能:把要添加的元素拆分(如果不是单个字符),再一个一个地添加到集合中;

·演示如下:

>>> 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;

·演示如下:

>>> 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中存在该元素,则删除,无论存在与否,都没有提示;

·演示如下:

>>> 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中一个不确定的元素;

·演示如下:

>>> 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 不属于

--差集,相对补集:-

>>> 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([])

--交集:&

>>> a & b
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

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

>>> a.intersection(b)
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

--并集:|

>>> a | b
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

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

>>> a.union(b)
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

--对称差集:^

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()函数实现:

>>> a.symmetric_difference(b)
set([10, 11, 12, 13, 14])
>>> b.symmetric_difference(a)
set([10, 11, 12, 13, 14])

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

>>> a == b
False
>>> a != b
True

--属于与不属于:in与not in

>>> 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

·指的是元素是否属于集合,而不是集合之间的包含;

·集合之间的包含(子集)可用:>、>=、<、<=等表示

>>> a >= b
False
>>> a <= b
True

·<=相当于函数issubset():

>>> a <= b
True
>>> a.issubset(b)    ===>a是b的子集
True

·>=相当于函数issuperset():

>>> a >= b
False
>>> a.issuperset(b)    ===>a不是b的超集,即a不包含b
False
>>> b.issuperset(a)    ===>b是a的超集,即b包含a
True


5.其它操作

--len()

·功能:测定集合的长度;

·演示如下:

>>> len(a)
10
>>> len(b)
15

--copy()

·功能:浅复制;

·前面已有提及,不再重复;

--hash()

·功能:返回参数的哈希值;

·演示如下:

>>> 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类型(列表也不行),但可以为字符串类型:

>>> hash(‘CL‘)
8576051523077447

·只要数据量足够大,hash是有可能产生相同的hash值,更安全的为md5类型的hash值计算:

>>> import hashlib
>>> a = ‘hello‘
>>> a = hashlib.md5()
>>> a.hexdigest()
‘d41d8cd98f00b204e9800998ecf8427e‘

·可以看到产生的hash值中还包含有字母等字符,因此破解的难度会更大。

时间: 2024-08-02 11:52:03

【Python之旅】第二篇(七):集合的相关文章

Objective-C学习之旅 第二篇

Objective-C学习之旅 第二篇 Objective-C 字符串处理 //苹果从iOS5开始,就引入了ARC这种内存管理技术,目的就是消除繁琐而容易出错的手工内存管理行为. //如果项目是ARC的,那么就不能调用原来的retain, release, autorelease,而且dealloc也不再需要内存维护相关的代码. //也就是说下面的例子中,如果在ARC模式下,就不用[astring release]; /**************************************

由浅入深,走进Python装饰器-----第二篇:进阶--函数装饰函数

上一篇:由浅入深,走进Python装饰器-----第一篇:基础 装饰器的使用种类: # 第一种 @函数 被装饰函数 # 第二种 @函数 被装饰类 # 第三种 @类 被装饰类 # 第四种 @函数 被装饰函数 本篇介绍第一种 @函数 被装饰函数 1.1 对带参数的原函数进行修饰 # 默认将old函数的参数传给outer里面的第一层函数 def outer(f): def inner(var): print("1 我是outer函数,接收外部传进来的old :",f) print("

【Python之旅】第七篇(一):再谈Python多线程

主要是再进一步加深Python中关于多线程相关函数join()的理解以解多线程的执行过程.这里通过下面的例子来作进一步的说明. 1.多线程与主程序代码的执行顺序关系 给出下面程序代码: #!/usr/bin/env python import threading import time def sayHi(n): time.sleep(1) print 'Hi this is thread %s' %n thread_list = []    #用来存放多线程执行返回的函数入口,因此这里存放的是

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

由于学习开发监控软件的需要,因此需要使用到Redis,这里简单介绍. 1.安装 可以查看这里的文章:http://www.linuxidc.com/Linux/2014-05/101544.htm 2.启动 由于采用的是源码安装的方式,所以直接进入src目录,启动redis-server: [email protected]:/mnt/hgfs/Python/day7/redis-2.8.9/src$ ./redis-server  [12681] 16 Oct 00:06:52.964 # W

Python开发【第二篇】:初识Python

Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第四!!!   Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都

Python自动化 【第二篇】:Python基础-列表、元组、字典

本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,让我们先来象征性的学2个简单的. sys 1 #!/usr/bin/env python 2 3 # -*- coding: utf-8 -*- 4 5 6 7 import sys 8 9 10 11 print(sys.argv) 12 13

Python之旅 (基础篇1-22)

格式化输出:format  %s  %d 第一种写法: #name=input('name:') #age=input('age:') #job=input('job:') #info=''' #name:%s #age:%s #job:%s #'''%(name,age,job) #print (info) #name=input ('请输入名字:') #age=input ('请输入年龄:') #score=input ('请输入成绩:') #mag ='我叫%s,我今年%s,我成绩是优秀%

python之路第二篇

python语言介绍 编译型和解释型 静态语言和动态语言 强类型定义语言和弱类型语言 python数据类型介绍 python数据类型分:数字.布尔型.字符串.列表.元组.字典 1.整数 例如:1,2,33,44等 整数的功能如下: 1 class int(object): 2 """ 3 int(x=0) -> int or long 4 int(x, base=10) -> int or long 5 6 Convert a number or string t

Python学习【第二篇】Python入门

Python安装 windows: 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机]-->[属性]-->[高级系统设置]-->[高级]-->[环境变量]-->[在第二个内容框中找到 变量名为Path 的一行,双击] --> [Python安装目录追加到变值值中,用 : 分割] 如:原来的值;C:\python27,前面有分号 linux: 自带python

Python之旅 (基础篇二 1-25)

字典: 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的.可哈希表示key必须是不可变类型,如:数字.字符串.元组. 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象结合,字典是无序的对象集合.两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取. 2.6.1.增. dic