目录
1.集合的定义
集合中的所有元素都应该是"独一无二"并且"无序"。
首先我们先创建一个集合,创建集合的方式有以下两种:
n = {"ab","cd","ef"}
n
>>>{'ef', 'cd', 'ab'}#这里体现了集合的无序性
n = set("csdn")
n
>>>{'c', 'n', 's', 'd'}
并且,我们可以用in/not in来判断某个元素是否属于集合。
那么集合的唯一性是指集合输出时会去除重复的元素,那么我们可以使用len()函数判断集合是否去除重复的元素。
n = {1,2,3,4,1,2,5,6}
n
>>>{1, 2, 3, 4, 5, 6}
m = (1,2,3,4,1,2,5,6)
m
>>>(1, 2, 3, 4, 1, 2, 5, 6)
len(n)== len(m)
>>>False
2.集合经常使用的函数
isdisjoint()函数表示判断两个集合是否为不相关,例如:
a = set("csdn")
b = set("ssdn")
a.isdisjoint(b)
>>>False
c = set("aabb")
a.isdisjoint(c)
>>>True
issubset()函数表示判断该集合是否为另一个集合的子集,例如:
a = set("ab")
b = set("aabb")
a.issubset(b)
>>>True
issuperset()函数表示判断该集合是否为另一个集合的超集,例如:
a = set("aabb")
b = set("ab")
a.issuperset(b)
>>>True
union()函数表示构建两个集合的并集,例如:
a = set("abcd")
b = set("ef")
a.union(b)
>>>{'a', 'c', 'e', 'f', 'd', 'b'}
intersection()函数表示构建两个集合的交集,例如:
a = set("abc")
b = set("abcd")
a.intersection(b)
>>>{'b', 'a', 'c'}
difference()函数表示构建两个集合的差集,差集是一种集合运算,记A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做集合A减集合B(或集合A与集合B之差),类似地,对于集合A、B,把集合{x∣x∈A,且x∉B}叫做A与B的差集。
例如:
a = set("abcd")
b = set("abcdef")
a.difference(b)
>>>set()
b.difference(a)
>>>{'e', 'f'}
symmetric_difference()函数表示构建两个集合的对称差集。对于两个集合A,B,先排除集合A与集合B的所有共同元素,由剩下的元素组成的集合,叫做集合A和集合B的对称差集。
例如:
a = set("abcd")
b = set("abcdef")
a.symmetric_difference(b)
>>>{'e', 'f'}
b.symmetric_difference(a)
>>>{'e', 'f'}
3.集合的运算符
(<)表示子集的判断,(>)表示超集的判断,(<=)表示真子集的判断,(>=)表示真超集的判断,(|)表示并集的判断,(&)表示交集的判断,(-)表示差集的判断,(^)表示对称差集的判断。
下面依次举例:
a = set("abc")
b = set("abcd")
a<b
>>>True #a是b的子集
b<a
>>>False #b不是a的子集
a>b
>>>False #a不是b的超集
b>a
>>>True #b是a的超集
a<=b
>>True #a是b的真子集
a>=b
>>>False #a是b的真超集
a|b
>>>{'a', 'c', 'd', 'b'} #a和b的并集
a&b
>>>{'b', 'a', 'c'} #a和b的交集
a-b
>>>set() #a对b的差集为空集
b-a
>>>{'d'} #b对a的差集为{“b”}
a^b
>>>{'d'} #a和b的对称差集为{“b”}
b^a
>>>{'d'} #a和b的对称差集为{“b”}
4.集合的分类
python将集合细分为可变集合(set())与不可变集合(forzenset())。
update(*others)函数表示对集合进行更新,其中others表示支持多个参数,如果是other则表示支持单个参数。例如:
a = set("abcd")
a.update("ae")
a
>>>{'a', 'd', 'b', 'c', 'e'} #集合里面的内容被改变
b = frozenset("abcd")
b.update("ae")
>>>Traceback (most recent call last): #集合无法被改变
File "<pyshell#1>", line 1, in <module>
b.update("ae")
AttributeError: 'frozenset' object has no attribute 'update'
此外update()可以于之前的intersection,difference,symmetric_difference搭配,得到以下的函数,表示对集合进行运算之后,集合会进行更新,如果是没有与update()结合,则只是表示返回计算的结果。
例如:
a = set("abcd")
a.intersection_update("abef")
a
>>>{'b', 'a'}
a = set("acbd")
a.difference_update("bdef")
a
>>>{'c', 'a'}
a = set("acbd")
a.symmetric_difference_update("abcdef")
a
>>>{'e', 'f'}
add()函数表示在集合里面添加某个数据。例如:
a = set("abcd")
a.add("e")
a
>>>{'a', 'e', 'd', 'c', 'b'}
remove(elem)和discard(elem)函数表示删除集合里面某个元素,如果集合里面没有指定元素,则前者会报错,后者会默认。例如:
a
>>>{'a', 'e', 'd', 'c', 'b'}
a.remove("a")
a
>>>{'e', 'd', 'c', 'b'}
a.remove("z")
>>>Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
a.remove("z")
KeyError: 'z'
a.discard("z")
a
>>>{'e', 'd', 'c', 'b'}
pop()函数表示随机删除集合中的一个元素。例如:
a
>>>{'e', 'd', 'c', 'b'}
a.pop()
'e'
a
>>>{'d', 'c', 'b'}
clear()函数表示将集合进行清空。例如:
a
>>>{'d', 'c', 'b'}
a.clear()
a
>>>set()
5.可哈希和不可哈希
可哈希意思就是,通过hash函数,能产生唯一的value与key对应,如果key改变,value也应该改变,但是可变的数据结构,比如列表,它改变后,列表地址是不变的,可以理解为:不同的key指向了相同的value,这就发生了冲突,所以说列表是不可哈希的。
哈希的原则是通过一一对应的key和value,实现对key的快速访问,自然是不希望出现冲突的情况,在哈希表中,这种情况叫做碰撞,碰撞是难免的,我们只能想办法减少碰撞的发生。
具体可以看看以下文章。
以上是我此次分享,谢谢大家。