zoukankan      html  css  js  c++  java
  • 10_set集合

    一、集合类型

    集合是一组无序排列的可哈希的值(可哈希的值->不可变),集合成员可以做字典中的键。但集合本身是不可哈希的。

    集合是无序没有索引,也没有像字典的key,所以集合不能更改元素。只能增删查(print、for循环)

    集合的作用:

    1. 去重复元素
    2. 关系测试:交集、并集、差集、反交集、超集

    二、集合的操作

    1.集合的创建

    #set 的创建
    set1 = set('abcde')  #def __init__(self, seq=()):  接受一个可迭代对象
    set2 = {1,2,7,3,8,4,5,6}  #直接赋值
    print(set1)
    print(set2)

    2.去重

    #利用set去重
    li = [2,4,1,3,4,5,6,7,3,3]
    set1 = set(li)
    li = list(set1)
    
    print(li)

    3.集合的增

    3.1添加一个元素方法

    #添加一个元素使用set.add()
    set1 = {1,2,7,3,8,4,5,6}
    set1.add('a') #Add an element to a set.
    print(set1)  #{1, 2, 3, 4, 5, 6, 7, 8, 'a'}
    

    3.2迭代添加元素.接受一个可迭代对象,字符串、元组、列表、字典

    #迭代添加
    s1 = '中国'
    set1 = {1,2,7,3,8,4,5,6}
    set1.update(s1) #接受一个可迭代对象。把每个元素拆开,添加到set中
    print(set1)

    4.集合的删

    4.1删除一个元素从set中

    #删除一个元素从set中
    set1 = {1,2,7,3,8,4,5,6,'a'}
    set1.remove('a') #Remove an element from a set
    print(set1)

    4.2随机删除元素

    #随机删,并返回被删除元素
    set1 = {1,2,7,3,8,4,5,6,'a'}
    set2 = set1.pop()  #Remove and return an arbitrary set element.
    
    print(set2)
    print(set1)

    5.集合的其他操作

    #1.print打印
    set1 = {1,2,7,3,8,4,5,6,'a'}
    print(set1)
    
    #2.for循环
    for i in set1:
        print(i)
    
    #3.in not in
    print('a' in set1)
    
    #4.len()获取长度
    print('集合长度:%d'%(len(set1)))

     三、关系测试

    交集

    交集使用 & 或 intersection()

    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,5,6,7,8,9}
    set3 = set1 & set2
    set3 = set1.intersection(set2)
    print(set3)  #{3, 4, 5, 6, 7}

    并集

    并集: | 或者 union

    1 set1 = {1,2,3,4,5,6,7}
    2 set2 = {3,4,5,6,7,8,9}
    3 
    4 set3 = set1 | set2
    5 set3 = set1.union(set2)
    6 print(set3)  #{1, 2, 3, 4, 5, 6, 7, 8, 9}

    差集

    差集:两者各自特有的部分。使用 - 或者 difference()

    #差集 : 两者做差,求各自特有的部分;该集合中的元素,只属于某一个集合,不属于另外那个集合
    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,5,6,7,8,9}
    
    #两种方式 - 或者 difference
    set3 = set1 - set2 #两者做差,求各自特有的部分
    set4 = set2 - set1 #两者做差,求各自特有的部分
    set3 = set1.difference(set2)
    set4 = set2.difference(set1)
    
    print(set3)#{1, 2}  #set1特有的部分
    print(set4)#{8, 9}  #set2 特有的部分

    反交集

    反交集:^ 或者 symmetric_difference();该集合元素只能属于set1或者set2,不能同时set1又属于set2两个集合。->抛去两个集合相交的部分,把两者剩余的组成一个新集合。

    1 #反交集:抛去他俩相同的部分,再组成一个新集合
    2 set1 = {1,2,3,4,5,6,7}
    3 set2 = {3,4,5,6,7,8,9}
    4 
    5 set3 = set1 ^ set2
    6 set3 = set1.symmetric_difference(set2)
    7 
    8 print(set3)  #{1, 2, 8, 9}  1,2是set1特有,8,9是set2特有

    子集与超集

     1 #子集与超集 : 检测某个集合是否是其他集合的超集或子集
     2 #成立条件:set2必须得包含set1,并且含有set1没有的元素。set1不含有set2中的元素
     3 set1 = {1,2,3,4,5,6,7}
     4 set2 = {3,4,5,6,7,8,9}
     5 set3 = {4,3}
     6 
     7 print(set2.issuperset(set1))  #False  >=
     8 print(set1.issuperset(set2))  #False
     9 print(set2.issuperset(set3))  #True
    10 print(set3.issubset(set2))    #True  <=  set3是set2的子集
  • 相关阅读:
    qml+opencv(二),实现人脸检测
    CPU满格的元凶,这回是由于QTimer引起的(默认interval是0,太猛)
    Qt文档系统分析(解释Qt文档的生成工具与过程)
    2015 最受开发者欢迎的开发工具和服务(摘录对自己有用的)
    RAD Studio 10 自带Demo代码汇总说明
    ACE 容器之三 ACE_Unbounded_Queue的使用
    开发快很重要——如果只看法语或者产品结果C++似乎很强大,但是参与这个C++的开发过程,就会感觉到这种痛苦(Google也是这个看法)
    我是觉得创业永远不晚 但是绝对要谨慎,不是破釜沉舟就一定能赢的(不用拿工资啊 吃喝拉撒在公司报账就好了)
    人生的成功与否,真的是以天来计算啊——时间永远都是最宝贵的!
    thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8386033.html
Copyright © 2011-2022 走看看