zoukankan      html  css  js  c++  java
  • Python的set集合详解

    Python 还包含了一个数据类型 —— set (集合)。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。

    创建集合set

      大括号或 set() 函数可以用来创建集合。 

      set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组进行去重操作。

    创建空集合

    >>> s=set()
    >>> s
    set()
    >>> s1=set([]) #列表
    >>> s1
    set()
    >>> s2=set(()) #元组
    >>> s2
    set()
    >>> s3=set({}) #字典
    >>> s3
    set()
    

      注意:想要创建空集合,你必须使用 set() 而不是 {}。后者用于创建空字典,我们在后面介绍的一种数据结构。

    创建非空集合

     即列表,元组,字典不在是空值,举两个例子

    >>> s1=set([1,2,3,4])
    >>> s1
    {1, 2, 3, 4}
      
    >>> s3=set({'a':2,'b':3,'c':4})
    >>> s3
    {'c', 'a', 'b'}
    

      注:字典转set集合,需要注意的是,只取了字典的key,相当于将字典中的dict.keys()列表转成set集合。

    集合的操作

    集合添加

      集合的添加有两种方式,分别是add和update。但是它们在添加元素时是由区别的:

    • add()方法
      把要传入的元素作为一个整体添加到集合中,如:
    >>> s=set('one')
    >>> s
    {'e', 'o', 'n'}
    >>> s.add('two')
    >>> s
    {'e', 'two', 'o', 'n'}
    
    • update()方法
      是把要传入的元素拆分成单个字符,存于集合中,并去掉重复的字符。可以一次添加多个值,如:
    >>> s=set('one')
    >>> s
    {'e', 'o', 'n'}
    >>> s.update('two')
    >>> s
    {'e', 'n', 't', 'w', 'o'}
    

    集合删除

      集合的删除操作使用的方法跟列表是一样的,使用的也是remove方法。如:

    • setVar.remove(element)
      setVar :为一个set类型的变量
      element :表示要查找并删除的元素
      函数作用:
      在集合setVar中查找element元素,如果存在则删除;如果没找到,则报错。
    >>> s=set('one')
    >>> s
    {'e', 'o', 'n'}
    >>> s.remove('e')
    >>> s
    {'n', 'o'}
    
    • setVar.discard(element)
      setVar :为一个set类型的变量
      element :表示要查找并删除的元素
      函数作用:
      在集合setVar中查找element元素,如果存在则删除;如果没找到,则什么也不做。
    >>> sList
    set([1, 2, 3, 4, 5])
    >>> sList.discard(1)
    >>> sList
    set([2, 3, 4, 5])
    
    • s.pop()
      s:为set类型的变量
      函数作用:
      删除并返回set类型的s中的一个不确定的元素,如果为空引发KeyError错误。
    >>> sList
    set([2, 3, 4, 5])
    >>> sList.pop()
    2
    
    • s.clear()
      s:set类型的变量
      函数作用:
      清空s集合中的所有元素
    >>> sList
    set([3, 4, 5])
    >>> sList.clear()
    >>> sList
    set([])
    

    集合的遍历

    集合的遍历跟序列的遍历方法完全一样。

    >>> s=set('one')
    >>> s
    {'e', 'o', 'n'}
    >>> for i in s:
    	print(i)
    ... ... 
    e
    o
    n
    >>> 
    

    另一种遍历方式:

    >>> s=set('one')
    >>> s
    {'e', 'o', 'n'}
    >>> for idex,i in enumerate(s):
    		print (idex,i)
    ... ... 
    0 e
    1 o
    2 n
    >>> 
    

      变量idex表示集合中元素i的索引。

    集合其他方法

    函数 说明
    len(s) set 的长度
    x in s 测试 x 是否是 s 的成员
    x not in s 测试 x 是否不是 s 的成员
    s.issubset(t) 测试是否 s 中的每一个元素都在 t 中
    s.issuperset(t) 测试是否 t 中的每一个元素都在 s 中
    s.union(t) 返回一个新的 set 包含 s 和 t 中的每一个元素
    s.intersection(t) 返回一个新的 set 包含 s 和 t 中的公共元素
    s.difference(t) 返回一个新的 set 包含 s 中有但是 t 中没有的元素
    s.symmetric_difference(t) 返回一个新的 set 包含 s 和 t 中不重复的元素
    s.copy() 返回 set “s”的一个浅复制

    集合的一些操作符

      既然是集合,那就会遵循集合的一些操作方法,如求交集、并集、差集等。

    交集

      Python中求集合的交集使用的符号是“&”,返回连个集合的共同元素的集合,即集合的交集。

    >>> st1 = set('python')
    >>> st1
    set(['h', 'o', 'n', 'p', 't', 'y'])
    >>> st2 = set('htc')
    >>> st2
    set(['h', 'c', 't'])
    >>> st1 & st2
    set(['h', 't'])
    

    并集(合集)

      Python中求集合的并集用的是符号“|”,返回的是两个集合所有的并去掉重复的元素的集合。

    >>> st1
    set(['h', 'o', 'n', 'p', 't', 'y'])
    >>> st3 = set('two')
    >>> st3
    set(['o', 't', 'w'])
    >>> st1 | st3
    set(['p', 't', 'w', 'y', 'h', 'o', 'n'])
    

    差集

      Python中差集使用的符号是减号“-”。

    >>> st1
    set(['1', '3', '2', '5', '4', '7', '6'])
    >>> st2 = set('4589')
    >>> st2
    set(['9', '8', '5', '4'])
    >>> st1 - st2
    set(['1', '3', '2', '7', '6'])
    

      返回的结果是在集合st1中但不在集合st2中的元素的集合。

    集合的不同

      查看两个集合的不同之处,使用的difference函数,等价于差集。如:
      **s1.difference(s3) **
      这种不同指的是集合s3相对于集合s1,不同的地方,也就是所有在集合s1中,而不再集合s2中的的元素组成的新集合。

    >>> s1
    set([1, 2, 3, 4, 5])
    >>> s2
    set([1, 2, 3, 4])
    >>> s1.difference(s2)
    set([5])
    >>> s3
    set(['1', '8', '9', '5'])
    >>> s1.difference(s3)
    set([1, 2, 3, 4, 5])
    

    集合的范围判断

      集合可以使用大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)来判断某个集合是否完全包含于另一个集合,也可以使用子父集判断函数。

     定义三个集合s1,s2,s3:

    >>> s1=set([1, 2, 3, 4, 5])
    >>> s2=set([1, 2, 3, 4])
    >>> s3=set(['1', '8', '9', '5'])
    

    大于(>)或大于等于(>=)

    >>> s1 > s2
    True
    >>> s1 > s3
    False
    >>> s1 >= s2
    True
    

      表示左边集合是否完全包含右边集合,如集合s1是否完全包含集合s2。

    小于(<)或 小于等于(<=)

    >>> s2 < s1
    True
    >>> s1 < s3
    False
    >>> s3 < s1
    False
    

      表示左边的集合是否完全包含于右边的集合,如集合s1是否完全包含于集合s2。

    等于(==)、不等于(!=)

    >>> s1 == s2
    False
    >>> s2 == s3
    False
    >>> s1 != s2
    True
    

      判断两个集合是否完全相同。

    不可变集合frozenset

      Python中还有一种不可改变的集合,那就是frozenset,不像set集合,可以增加删除集合中的元素,该集合中的内容是不可改变的,类似于字符串、元组。

    >>> f = frozenset()
    >>> f
    frozenset([])
    >>> f = frozenset('asdf')
    >>> f
    frozenset(['a', 's', 'd', 'f'])
    >>> f = frozenset([1,2,3,4])
    >>> f
    frozenset([1, 2, 3, 4])
    >>> f = frozenset((1,2,3,4))
    >>> f
    frozenset([1, 2, 3, 4])
    >>> f = frozenset({1:2, 'a':2, 'c':3})
    >>> f
    frozenset(['a', 1, 'c'])
    

      如果试图改变不可变集合中的元素,就会报AttributeError错误。
      不可变集合,除了内容不能更改外,其他功能及操作跟可变集合set一样。

  • 相关阅读:
    LeetCode周赛#206
    CET-6备考丨词组、佳句积累
    界面设计9.24第一次课
    图像超分辨率重建
    OpenGL和计算机图形学初步认识
    OpenGL装gult库
    安装java
    vs2019配置Opengl
    最长上升子序列(最长递增子序列)LIS
    c++科学计数法 、long long的范围
  • 原文地址:https://www.cnblogs.com/yangliguo/p/7773968.html
Copyright © 2011-2022 走看看