前言
该文章描述了Python数据类型当中集合的概念
2020-01-17
天象独行
集合也是属于python语言当中的一种数据类型,特点是:有的可变,有的不可变,元素无次序,不可重复。如果说元组(tuple)算是列表(list)和字符串(str)的杂合,那么集合(set)则可以堪称是list和dict的杂合。集合拥有类似字典的特点:可以用{}花括号来定义;其中的元素没有序列,也就是非序列类型的数据;而且集合中的元素不可重复,这就类似于dict键。集合也有一点列表的特点:有一种集合可以在原处修改。
0X01;创建集合
1;set()方法创建
注意:set()创立的集合都是可原地修改的集合,或者说是可变的,也可以说是unhashabl
>>> x = set('aaron') >>> x {'n', 'o', 'a', 'r'} >>>
2;通过{}创建
注释:通过{}无法创建含有列表或者字典类型对象元素的集合。
>>> y = {'w','asdfads','owenoeo'} >>> y {'owenoeo', 'w', 'asdfads'} >>>
3;通过frozenset()创建
注释:这种集合的创建方法是用frozenset()不能原地修改
>>> a = frozenset("asdfgh") >>> a frozenset(['a', 'd', 'g', 'f', 'h', 's']) >>>
0X02;集合函数
我们都知道“万物皆对象”,这里面当然也是包括集合的,那么集合有没有继承一些对象的方法呢?这些方法怎么使用呢?正常我们通过dir()方法来查看对象包含了哪些方法,help查看如何使用方法。
1;查看集合包含方法
>>> x = set('aaron') >>> x {'n', 'o', 'a', 'r'} >>> y = {'w','asdfads','owenoeo'} >>> y {'owenoeo', 'w', 'asdfads'} >>> dir(x) ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
2;查看方法作用
>>> help(x.update)
Help on built-in function update: update(...) method of builtins.set instance Update a set with the union of itself and others.
0X03;集合运算
1;元素与集合的关系
元素与集合就一种关系,要么属于某个集合,要么不属于。
>>> b = frozenset("sdfgf") >>> b frozenset({'d', 'f', 's', 'g'}) >>> "d" in b True >>> "u" in b False >>>
2;集合与集合的关系
假设两个集合A、B
2.1;A是否等于B,即两个集合的元素是否完全一样。
>>> x = set("qwer") >>> y = set("qwer") >>> x {'w', 'q', 'r', 'e'} >>> y {'w', 'q', 'r', 'e'} >>> x == y True >>> x != y False >>>
2.2;A是否是B的子集,或者反过来,B是否是A的超集,即A的元素是否也都是B的元素,且B的元素比A的元素数量多。判断集合A是否是集合B的子集,可以使用A
>>> a = set("qazwsxedc")
>>> b = set("qazwsx")
>>> a
{'x', 'c', 'z', 'd', 'w', 'q', 'a', 's', 'e'}
>>> b
{'x', 'z', 'w', 'q', 'a', 's'}
>>> a < b
False
>>> a > b
True
>>>
2.3;A、B的并集,即A、B所有元素。可以使用的符号是“|”,是一个半角状态下的竖线,输入方法是在英文状态下,按下“shift”加上右方括号右边的那个键。表达式是A|B也可使用函数A.union(B),得到的结果就是两个集合并集,注意,这个结果是新生成的一个对象,不是将结合A扩充
>>> a = set("qazwsxedc") >>> b = set("pl,okmijn") >>> c = a | b >>> c {'l', 'k', 'x', 'c', 'j', 'z', 'i', 'd', ',', 'p', 'o', 'n', 'w', 'q', 'a', 's', 'm', 'e'} >>>
2.4;A、B的交集,即A、B所公有的元素,使用“&”来操作
>>> a = set("qazwsxedc") >>> b = set("edcrfvtgb") >>> c = a & b >>> c {'d', 'c', 'e'} >>>
2.5;)A相对B的差(补),即A相对B不同的部分元素。使用“-”来操作
>>> a = set("qazwsxedc") >>> b = set("edcrfvtgb") >>> c = a - b >>> c {'x', 's', 'z', 'q', 'a', 'w'} >>>