美文网首页
数据类型 -- Set(集合)

数据类型 -- Set(集合)

作者: __深蓝__ | 来源:发表于2019-01-04 10:08 被阅读0次

    集合(set)是一个无序、不重复的元素序列。
    集合(set)是可变数据类型

    创建集合

    使用 集合变量 = {value01,value02,...}集合变量 = set(value)

    >>> s1 = { 1, 2, 3 }
    >>> s1
    {1, 2, 3}
    
    >>> s2 = set( [1, 2, 3] )
    >>> s2
    {1, 2, 3}
    

    第2个例子中,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。

    • 创建空集
    >>> s = set()
    或
    >>> s = { () }
    

    直接使用 s = { } 会创建一个空字典

    • 重复元素在set中会被自动过滤
    >>> s = set([1, 1, 2, 2, 3, 3])
    >>> s
    {1, 2, 3}
    
    • 两个集合可以完成数学意义上的交集、并集、差集等操作。
    >>> a = set('abracadabra')
    >>> b = set('alacazam')
    >>> a                                  
    {'a', 'r', 'b', 'c', 'd'}
    >>> a - b                              # 差集,a 中包含而 b 中不包含的元素
    {'r', 'd', 'b'}
    >>> a | b                              # 并集,a 或 b中包含的所有元素
    {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
    >>> a & b                              # 交集,a 和 b中都包含了的元素
    {'a', 'c'}
    >>> a ^ b                              # a 和 b 中不同时存在的元素
    {'r', 'd', 'b', 'm', 'z', 'l'}
    
    • 集合是可变数据类型,但其元素不能是可变数据类型
    >>> s = {[1,2,3], [11,22,33]}
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    
    • set 的原理和 dict 一样,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
    • 注意区别:“将 list 转换为集合 ” 和 “ 将 list 做为元素放入集合 ”
    >>> s1 = set( [1,2,3,4,5] )   # 使用 set() 函数,将 list 转为 集合
    >>> s1
    {1, 2, 3, 4, 5}
    >>> type(s1)
    <class 'set'>
    
    >>> s2 = { [1,2,3,4,5] }     # 将 list 做为元素放入集合
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    
    集合方法
    • add(key) 方法可以添加元素到set中,可以重复添加,但不会有效果。
    >>> thisset = set(("Google", "Neuedu", "Taobao"))
    >>> thisset.add("Facebook")
    >>> thisset
    {'Taobao', 'Facebook', 'Google', 'Neuedu'}
    
    >>> thisset.add("Facebook")
    >>> thisset.add("Facebook")
    >>> thisset
    {'Taobao', 'Facebook', 'Google', 'Neuedu'}
    
    • update(set) 方法将另一个集合中的元素添加到当前集合中。
    x = {"apple", "banana", "cherry"}
    y = {"google", "neuedu", "apple"} 
    x.update(y)  
    print(x)
    
    {'banana', 'apple', 'google', 'neuedu', 'cherry'}
    

    注意: s1.add( (1,2,3) ) 是把元组 (1,2,3) 作为元素添加到集合中,得到的结果是 {1, 2, 3, (1, 2, 3)}

    • remove(key)方法可以删除元素,不返回被删元素,如果元素不存在会报错。
    >>> thisset = set(("Google", "Neuedu", "Taobao"))
    >>> thisset.remove("Taobao")
    >>> print(thisset)
    {'Google', 'Neuedu'}
    >>> thisset.remove("Facebook")   # 不存在会发生错误
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'Facebook'
    

    discard(obj),删除元素,不返回被删元素,元素不存在时不报错
    remove(obj),删除元素,不返回被删元素,元素不存在时报错
    pop(),随机删除元素,返回被删元素,集合为空时报错

    • x in s 判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
    >>> thisset = set( ("Google", "Neuedu", "Taobao") )
    >>> "Neuedu" in thisset
    True
    >>> "Facebook" in thisset
    False
    
    • copy() 方法用于拷贝一个集合。
    fruits = {"apple", "banana", "cherry"}
    x = fruits.copy()
    print(x)
    
    {'cherry', 'banana', 'apple'}
    
    集合函数
    • len(set)函数,用来获得集合元素个数
    >>> thisset = set(("Google", "Runoob", "Taobao"))
    >>> len(thisset)
    3
    




    - end -

    相关文章

      网友评论

          本文标题:数据类型 -- Set(集合)

          本文链接:https://www.haomeiwen.com/subject/cjrnlqtx.html