Table of Contents generated with DocToc
ditctaionary and set
hash 介绍
hash是计算机中非常常见一种查找的手法,它可以支持常数时间的insert、remove、find,但是对于findMin、findMax、sort等操作就支持的不是很好,具体是为什么呢;
hash其实是通过key来找value的,可以这样简单的理解为value都被存在一个数组之中,每次你用key计算一下可以得到相应数组的下标,即 index=f(key) 是不是一下子就找到元素所在位置了呢!
集合-set
集合(set)是一类容器,元素没有先后顺序,并且元素的值不重复。
集合的字面量用花括号{}
eg:
{1,5,7}
{'apple', 'orange', 'pear', 'banana'}
创建
直接给变量赋值一个集合字面量
fruit = {'apple', 'orange', 'pear', 'banana'}
使用set()创建一个空集合
emp = set()
注:emp = {} #创建一个空字典
使用set()将列表或元组转换成集合
prime = set([1,3,5,7,11])
结果是:
{1, 3, 5, 7, 11}
操作和访问集合的元素
可以用add()和remove()添加和删除集合元素
可以用min()、max()、len()和sum()对集合操作。
集合内的元素是无序的,所以不能像列表那样通过下标来访问集合元素。
用循环实现遍历集合中的各个元素
s = {2,3,5,7,11}
for i in s:
print(i,end='')
#输出:
#235711
运算符in和not in 用于判断某个元素是否在集合中。
s = {2,3,5,7,11
print(5 in s)
print(4 not in s)
输出:
True
True
子集、超集、相对判断
如果集合s1中的元素,同样都在集合s2中,则称s1为s2的子集,s2为s1的超集。
使用s1.issubset(s2)来判断s1是否为s2的子集。
使用s2.issuperset(s1)来判断s1是否为s2的超集。
s1 = {2,3,5,7}
s2 = {1,2,3,4,5,6,7}
print(s1.issubset(s2))
print(s2.issuperset(s1))
输出:
True
True
使用关系运算符==和!=
- 判断2个集合包含的元素完全相同与否。
使用关系运算符<,<=,>,>=。
- 如果s1是s2的真子集,则s1
- 如果s1是s2的子集,则s1<=s2是True
- 如果s1是s2的真超集,则s1>s2是True
- 如果s1是s2的超集,则s1>=s2是True
- 注:s1是s2的真子集的意思是s1是s2的子集,但是s2中至少有一个s1中不存在的元素; s1是s2的真超集的意思是s1是s2的超集,但是s1中至少有一个s2中不存在的元素。
通过集合的函数或运算符进行集合的并集、交集、差集和对称差的集合运算。
运算
函数
运算符
说明
并集
union()
|
同数学中的并集
交集
intesection()
&
同数学交集
差集
difenrence()
-