• python数据类型(集合set)


    集合
     
           集合是无序的对象集,它和字典一样使用花括号,但没有键值对的概念。集合属于可变的数据类型,一般用于保持序列的唯一性—— 也就是同样的元素仅出现一次。
     
           在使用集合时一定要注意集合的“无序”和“唯一”两个特点,避免出错。
     
    一、集合的创建
    s = set()  # 创建一个空集合
    
    s1 = {}  # 这是创建一个空字典,而非集合
    print(type(s1))
    # <class 'dict'>
    
    s2 = {2, 'hello', True, 3.14}  # 创建四个元素的集合
    

      

           集合的元素是唯一的,当集合出现不唯一的字符时,创建的集合中只会保存一个。
    set1={1,2,3,3,4,2}
    print(set1)
    # {1, 2, 3, 4}
    

      注意:布尔值True和False在底层分别是以1和0保存的,因此如果同时出现在集合中的时候,会去掉后面的值。

    set2 = {3.14, True, 'Jack', 1, ''}    # 去除1
    print(set2)
    # {'', True, 3.14, 'Jack'}
    

    二、添加元素

           语法:s.add(x)

           将元素X添加到集合S中,如果元素存在,则不进行任何操作。

    s={'Jack','Rose',"Mery"}
    s.add('John')
    print(s)
    # {'Rose', 'Mery', 'John', 'Jack'}
    

      

    三、删除元素

           语法:s.pop()

           随机删除集合里的一个元素。
    s = {'Jack', 'Rose', "Mery"}
    s.pop()   # 随机删除
    print(s)
    # {'Rose', 'Jack'}
    

      

           语法:s.remove(element)

           删除集合里指定(element)的值,如值不存在,报错。

    s = {'Jack', 'Rose', "Mery"}
    s.remove('Rose')
    print(s)
    # {'Mery', 'Jack'}
    

      

    四、集合合并

           语法:s.update(iterable)

           将可迭代对象iterable拼接到s1里,去重。

    s1 = {'Jack', 'Rose', "Mery"}
    s2={'Rose','john'}
    
    s1.update(s2)  # 集合拼接
    print(s1)
    # {'Rose', 'Jack', 'john', 'Mery'}
    
    l1=['Rose','john']
    s1.update(l1)   # 列表拼接
    print(s1)
    # {'Rose', 'Jack', 'john', 'Mery'}
    

      

    五、清空元素

           将集合清空,留下一个空集合set()

    s = {'Jack', 'Rose'}
    s.clear()
    print(s)
    # set()
    

      

     六、集合运算

      
    • set支持减法运算符(求set1和set2的差集,set1中有,set2中无)
    • set支持&运算符(求set1和set2的交集,set1中有,set2中也有)
    • set支持|运算符(求set1和set2的并集,set1有,或set2中有)
    • set支持^运算符(求set1和set2的交集的补集)
    • set不支持加法运算符
    set1 = {1, 2, 3, 4, 5}
    set2 = {3, 4, 5, 6, 7}
    print(set1 - set2)
    # {1, 2}
    print(set1 & set2)
    # {3, 4, 5}
    print(set1 | set2)
    # {1, 2, 3, 4, 5, 6, 7}
    print(set1 ^ set2)
    # {1, 2, 6, 7}
    print(set1 + set2)
    # TypeError
    

      

    集合方法

           合集:使用union()方法。(同|运算符)

    print(set1.union(set2))
    # {1, 2, 3, 4, 5, 6, 7}
    

      

           交集:使用intersection()方法(同&运算符)

    print(set1.intersection(set2))
    # {3, 4, 5}
    

      

           差集:使用difference()方法(同减号运算符)

    print(set1.difference(set2))
    # {1, 2}
    

      

     七、集合存储原理

            集合存储原理同字典存储原理相似,区别是字典里的键是可哈希,而集合里所有元素是可哈希,即内部通过哈希函数把值转换成一个数字。

    v = hash('Jack')
    print(v)  # 8690505197273509452
    
    v1 = hash((11, 22, 33, 44))
    print(v1)  # 8386256510965472093
    

      

           目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。
     
           总结:集合的元素只能是int、bool、str、tuple。
     

    •  转换成功
    v1=[11,22,33,12,11,99]
    v2=set(v1)
    print(v2)   #(11,22,33,12,11,99)
    

      

    • 转换失败
    v1=[11,22,['zhangsan','lisi'],33]
    v2=set(v1)  #报错,元素是列表,不可哈希
    

      

            集合在底层也采用哈希算法,因此集合的查找效率非常高(数据量大了才明显),原理在字典中叙述过,可以参考字典2。

  • 相关阅读:
    排序算法之--堆排序
    排序算法之--插入排序
    排序算法之--直接选择排序
    排序算法之--快速排序(及优化测试亿级100_000_000用时)
    分布式计算--(分布式+多进程+多线程+多协程)
    HDU
    2019牛客多校第四场D-triples I 贪心
    Interview_C++_day8
    Interview_C++_day7
    Interview_C++_day6
  • 原文地址:https://www.cnblogs.com/shixiaoxun/p/14379755.html
Copyright © 2020-2023  润新知