python set(集合)

发布时间:2019-09-01 09:51:05编辑:auto阅读(1422)

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
    集合是一个无序的,不重复的数据组合,它的主要作用如下:
    去重,把一个列表变成集合,就自动去重了
    关系测试,测试两组数据之前的交集、差集、并集等关系
    集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。
    集合元素(set elements):组成集合的成员(不可重复)
    
    >>> li=[1,2,'a','b'] 
    >>> s =set(li)
    >>> print(s)             # {1, 2, 'a', 'b'}
    
    >>> li2=[1,2,1,'a','a']
    >>> s=set(li2)
    >>> print(s)             #{1, 2, 'a'}      重复元素在set中自动被过滤:
     #注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,
     显示的顺序也不表示set是有序的。。
    
    集合的相关操作  
    
    1、创建集合
    
    由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建
    
    >>> s1 = set('alvin')
    >>> s2= frozenset('yuan')
    >>> print(s1,type(s1))               #{'l', 'v', 'i', 'a', 'n'} <class 'set'>
    >>> print(s2,type(s2))               #frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>
    
    2、访问集合
    
    由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。
    
    >>> s1 = set('alvin')
    >>> print('a' in s1)     #True
    >>> print('b' in s1)     #False
    >>> #s1[1]  #TypeError: 'set' object does not support indexing
    >>> for i in s1:
    >>>     print(i)        #l     i    n   v    a
    
    3、更新集合
    
    可使用以下内建方法来更新:
    
    s.add()
    s.update()
    
    注意只有可变集合才能更新:
    
    >>> #s1 = frozenset('alvin')
    >>> #print(s1)           #frozenset({'a', 'n', 'i', 'v', 'l'})
    >>> #s1.add("ccdc")      #AttributeError: 'frozenset' object has no attribute 'add'
    >>> s2 = set('alvin')
    >>> s2.add('mm')
    >>> print(s2)  # {'mm', 'l', 'n', 'a', 'i', 'v'}
    >>> s2.update('HO')  # 添加多个元素
    >>> print(s2)  # {'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}
    
    4、删除集合
    s.remove()
    >>> s2 = set('alvin')
    >>> >>> print(s2)  # { 'l', 'n', 'a', 'i', 'v'}
    >>> s2.remove('l')
    >>> print(s2)  # {'n', 'a', 'i',  'v'}
    >>> del s2   #删除集合本身 
    >>> print(s2)    #NameError: name 's2' is not defined
    
    四、集合类型操作符 
    
    1   in ,not in
    2   集合等价与不等价(==, !=)
    
    3   子集、超集
    s=set('alvinyuan')
    s1=set('alvin')
    print('v' in s)
    print(s1<s)
    
    4   联合(|)
    联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()。
    s1=set('alvin')
    s2=set('yuan')
    s3=s1|s2
    print(s3)  #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
    print(s1.union(s2)) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'} 
    
    5、交集(&)
    与集合and等价,交集符号的等价方法是intersection()
    s1=set('alvin')
    s2=set('yuan')
    s3=s1&s2
    print(s3)  #{'n', 'a'}
    
    print(s1.intersection(s2)) #{'n', 'a'}
    
    6、查集(-)
    等价方法是difference()
    s1=set('alvin')
    s2=set('yuan')
    s3=s1-s2
    print(s3)  #{'v', 'i', 'l'}
    
    print(s1.difference(s2)) #{'v', 'i', 'l'} 
    
    7、对称差集(^)
    对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()
    s1=set('alvin')
    s2=set('yuan')
    s3=s1^s2
    print(s3)  #{'l', 'v', 'y', 'u', 'i'}
    
    print(s1.symmetric_difference(s2)) #{'l', 'v', 'y', 'u', 'i'}
    
    应用
    
    '''最简单的去重方式'''
    lis = [1,2,3,4,1,2,3,4]
    print list(set(lis))    #[1, 2, 3, 4]
    

关键字

上一篇: python rabbitmq send

下一篇: python的while循环