zoukankan      html  css  js  c++  java
  • Python基本数据类型之set

    一、定义

    set是一个无序且不重复的元素集合。

    集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。

    set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:

    1. 不重复

    2. 元素为不可变对象

    二、创建

    
    s = set()
    s = {11,22,33,44}  #注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典
    
    a=set('boy')
    b=set(['y', 'b', 'o','o'])
    c=set({"k1":'v1','k2':'v2'})
    d={'k1','k2','k2'}
    e={('k1', 'k2','k2')}
    print(a,type(a))
    print(b,type(b))
    print(c,type(c))
    print(d,type(d))
    print(e,type(e))
    
    OUTPUT:
    {'o', 'b', 'y'} <class 'set'>
    {'o', 'b', 'y'} <class 'set'>
    {'k1', 'k2'} <class 'set'>
    {'k1', 'k2'} <class 'set'>
    {('k1', 'k2', 'k2')} <class 'set'>

    三、基本操作

    比较

    
    se = {11, 22, 33}
    be = {22, 55}
    temp1 = se.difference(be)        #找到se中存在,be中不存在的集合,返回新值
    print(temp1)        #{33, 11}
    print(se)        #{33, 11, 22}
    
    temp2 = se.difference_update(be) #找到se中存在,be中不存在的集合,覆盖掉se
    print(temp2)        #None
    print(se)           #{33, 11},
    

    删除

    discard()、remove()、pop()

    
    se = {11, 22, 33}
    se.discard(11)
    se.discard(44)  # 移除不存的元素不会报错
    print(se)
    
    se = {11, 22, 33}
    se.remove(11)
    se.remove(44)  # 移除不存的元素会报错
    print(se)
    
    se = {11, 22, 33}  # 移除末尾元素并把移除的元素赋给新值
    temp = se.pop()
    print(temp)  # 33
    print(se) # {11, 22}
    

    取交集

    
    se = {11, 22, 33}
    be = {22, 55}
    
    temp1 = se.intersection(be)             #取交集,赋给新值
    print(temp1)  # 22
    print(se)  # {11, 22, 33}
    
    temp2 = se.intersection_update(be)      #取交集并更新自己
    print(temp2)  # None
    print(se)  # 22

    判断

    
    se = {11, 22, 33}
    be = {22}
    
    print(se.isdisjoint(be))        #False,判断是否不存在交集(有交集False,无交集True)
    print(se.issubset(be))          #False,判断se是否是be的子集合
    print(se.issuperset(be))        #True,判断se是否是be的父集合

    合并

    
    se = {11, 22, 33}
    be = {22}
    
    temp1 = se.symmetric_difference(be)  # 合并不同项,并赋新值
    print(temp1)    #{33, 11}
    print(se)       #{33, 11, 22}
    
    temp2 = se.symmetric_difference_update(be)  # 合并不同项,并更新自己
    print(temp2)    #None
    print(se)             #{33, 11}
    

    取并集

    
    se = {11, 22, 33}
    be = {22,44,55}
    
    temp=se.union(be)   #取并集,并赋新值
    print(se)       #{33, 11, 22}
    print(temp)     #{33, 22, 55, 11, 44}

    更新

    
    se = {11, 22, 33}
    be = {22,44,55}
    
    se.update(be)  # 把se和be合并,得出的值覆盖se
    print(se)
    se.update([66, 77])  # 可增加迭代项
    print(se)

    集合的转换

    
    se = set(range(4))
    li = list(se)
    tu = tuple(se)
    st = str(se)
    print(li,type(li))
    print(tu,type(tu))
    print(st,type(st))
    
    OUTPUT:
    [0, 1, 2, 3] <class 'list'>
    (0, 1, 2, 3) <class 'tuple'>
    {0, 1, 2, 3} <class 'str'>

    四、源码

    
    class set(object):
        """
        set() -> new empty set object
        set(iterable) -> new set object
        
        Build an unordered collection of unique elements.
        """
        def add(self, *args, **kwargs): 
            """添加"""
            """
            Add an element to a set.
            
            This has no effect if the element is already present.
            """
            pass
    
        def clear(self, *args, **kwargs): 
            """清除"""
            """ Remove all elements from this set. """
            pass
    
        def copy(self, *args, **kwargs): 
            """浅拷贝"""
            """ Return a shallow copy of a set. """
            pass
    
        def difference(self, *args, **kwargs): 
            """比较"""
            """
            Return the difference of two or more sets as a new set.
            
            (i.e. all elements that are in this set but not the others.)
            """
            pass
    
        def difference_update(self, *args, **kwargs): 
            """ Remove all elements of another set from this set. """
            pass
    
        def discard(self, *args, **kwargs): 
            """删除"""
            """
            Remove an element from a set if it is a member.
            
            If the element is not a member, do nothing.
            """
            pass
    
        def intersection(self, *args, **kwargs): 
            """
            Return the intersection of two sets as a new set.
            
            (i.e. all elements that are in both sets.)
            """
            pass
    
        def intersection_update(self, *args, **kwargs): 
            """ Update a set with the intersection of itself and another. """
            pass
    
        def isdisjoint(self, *args, **kwargs): 
            """ Return True if two sets have a null intersection. """
            pass
    
        def issubset(self, *args, **kwargs): 
            """ Report whether another set contains this set. """
            pass
    
        def issuperset(self, *args, **kwargs): 
            """ Report whether this set contains another set. """
            pass
    
        def pop(self, *args, **kwargs): 
            """
            Remove and return an arbitrary set element.
            Raises KeyError if the set is empty.
            """
            pass
    
        def remove(self, *args, **kwargs): 
            """
            Remove an element from a set; it must be a member.
            
            If the element is not a member, raise a KeyError.
            """
            pass
    
        def symmetric_difference(self, *args, **kwargs): 
            """
            Return the symmetric difference of two sets as a new set.
            
            (i.e. all elements that are in exactly one of the sets.)
            """
            pass
    
        def symmetric_difference_update(self, *args, **kwargs): 
            """ Update a set with the symmetric difference of itself and another. """
            pass
    
        def union(self, *args, **kwargs): 
            """
            Return the union of sets as a new set.
            
            (i.e. all elements that are in either set.)
            """
            pass
    
        def update(self, *args, **kwargs): 
            """ Update a set with the union of itself and others. """
            pass
    
        def __and__(self, *args, **kwargs): 
            """ Return self&value. """
            pass
    
        def __contains__(self, y): 
            """ x.__contains__(y) <==> y in x. """
            pass
    
        def __eq__(self, *args, **kwargs): 
            """ Return self==value. """
            pass
    
        def __getattribute__(self, *args, **kwargs): 
            """ Return getattr(self, name). """
            pass
    
        def __ge__(self, *args, **kwargs): 
            """ Return self>=value. """
            pass
    
        def __gt__(self, *args, **kwargs): 
            """ Return self>value. """
            pass
    
        def __iand__(self, *args, **kwargs): 
            """ Return self&=value. """
            pass
    
        def __init__(self, seq=()): # known special case of set.__init__
            """
            set() -> new empty set object
            set(iterable) -> new set object
            
            Build an unordered collection of unique elements.
            # (copied from class doc)
            """
            pass
    
        def __ior__(self, *args, **kwargs): 
            """ Return self|=value. """
            pass
    
        def __isub__(self, *args, **kwargs): 
            """ Return self-=value. """
            pass
    
        def __iter__(self, *args, **kwargs): 
            """ Implement iter(self). """
            pass
    
        def __ixor__(self, *args, **kwargs): 
            """ Return self^=value. """
            pass
    
        def __len__(self, *args, **kwargs): 
            """ Return len(self). """
            pass
    
        def __le__(self, *args, **kwargs): 
            """ Return self<=value. """
            pass
    
        def __lt__(self, *args, **kwargs): 
            """ Return self<value. """
            pass
    
        @staticmethod 
        def __new__(*args, **kwargs): 
            """ Create and return a new object.  See help(type) for accurate signature. """
            pass
    
        def __ne__(self, *args, **kwargs): 
            """ Return self!=value. """
            pass
    
        def __or__(self, *args, **kwargs): 
            """ Return self|value. """
            pass
    
        def __rand__(self, *args, **kwargs): 
            """ Return value&self. """
            pass
    
        def __reduce__(self, *args, **kwargs): 
            """ Return state information for pickling. """
            pass
    
        def __repr__(self, *args, **kwargs): 
            """ Return repr(self). """
            pass
    
        def __ror__(self, *args, **kwargs): 
            """ Return value|self. """
            pass
    
        def __rsub__(self, *args, **kwargs): 
            """ Return value-self. """
            pass
    
        def __rxor__(self, *args, **kwargs): 
            """ Return value^self. """
            pass
    
        def __sizeof__(self): 
            """ S.__sizeof__() -> size of S in memory, in bytes """
            pass
    
        def __sub__(self, *args, **kwargs): 
            """ Return self-value. """
            pass
    
        def __xor__(self, *args, **kwargs): 
            """ Return self^value. """
            pass
    
        __hash__ = None
  • 相关阅读:
    ACCP7.0-S2-复习自测-15测试分析
    线程
    多线程下的单例模式
    combobox 属性、事件、方法
    java的多线程总结
    爬虫--登录网页
    shell--字符串是否为空
    python--正则表达式 字符串匹配
    mysql---表所在数据库
    python--日期操作
  • 原文地址:https://www.cnblogs.com/xwqhl/p/10690903.html
Copyright © 2011-2022 走看看