Python3---数据类型---集合

前言

该文章描述了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<B,返回True则是子集,否则不是。另外,还可以使用函数A.issubset(B)判断。

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

 

 

 

  

posted @ 2020-01-17 13:45  天象独行  阅读(279)  评论(0编辑  收藏  举报