zoukankan      html  css  js  c++  java
  • 集合类型-课堂笔记整理

    集合类型

    pythoners=['王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱']
    linuxers=['陈独秀','wxx','egon','张全蛋']

    l1=[]
    for stu in pythoners: # for循环求并集
    if stu in linuxers:
    # print(stu)
    l1.append(stu)

    print(l1)

    l2=[]
    for stu in pythoners: # for循环求差集
    if stu not in linuxers:
    # print(stu)
    l2.append(stu)

    print(l2)


    一:基本使用
    1 用途: 关系运算、去重

    2 定义方式:{}内用逗号分隔开多个元素,每一个元素都必须是不可变(即可hash)类型
    强调:
    2.1 集合内元素都必须是不可变(即可hash)类型
    2.2 集合内的元素无序 无序指的是打印循环里的元素时不按照顺序排列。无序,所以没有索引取值这个概念。
    2.3 集合内的元素不能重复
    集合是一个整体,所以基本不用对里面的元素进行操作

    s={1,2,'a'} #s=set({1,2,'a'})
    print(type(s))

    s={1.1,1,'aa',(1,2,3),{'a':1}} # 会报错,集合里的元素必须是不可变的,可hash的。

    s={1,'a','hello',(1,2,3),4}
    for item in s:
    print(item)

    s={1,1,1,1,1,1,1,1,1,'a','b','a'}
    s={(1,2,3),(1,2,3),'a','b','a'}
    print(s)

    print({(1,2,2,2),2,5,"a"}) # 对集合里面的不可变类型,比如元组里面的值不可以去重。

    s=set('hello')
    print(s)
    和列表一样,但是多了个去重。
    {'o', 'e', 'l', 'h'}

    单纯的用集合去重,需要注意的问题是
    1、去重的目标所包含的值必须都为不可变类型
    2、去重的结果会打乱原来的顺序
    names=['asb','asb','asb','wsb','wsb','egon_nb',[1,2,3]]
    s=set(names) # 集合里的元素必须是不可变的

    names=list(s)
    print(names)


    3 常用操作+内置的方法
    优先掌握的操作:
    1、长度len
    pythoners={'王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱'}
    print(len(pythoners)) # 集合长度

    2、成员运算in和not in
    print('李二丫' in pythoners)


    pythoners={'王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱'}
    linuxers={'陈独秀','wxx','egon','张全蛋'}
    3、|并集
    print(pythoners | linuxers)
    print(pythoners.union(linuxers))

    {'egon', '艾里克斯', '欧德博爱', '王大炮', '陈独秀', '李二丫', '张全蛋', 'wxx'}

    4、&交集
    print(pythoners & linuxers)
    print(pythoners.intersection(linuxers))
    print(linuxers & pythoners)

    {'陈独秀', 'wxx'}

    5、-差集 # 去除重复的,剩下的元素组成了差集
    print(pythoners - linuxers) # pythoners剩下的元素
    print(pythoners.difference(linuxers))
    print(linuxers - pythoners) 3 linuxers 剩下的元素
    print(linuxers.difference(pythoners))

    {'李二丫', '艾里克斯', '王大炮', '欧德博爱'}

    6、^对称差集 取出重复的剩下的所有元素,又称交叉补集,根据字面意思理解就是交叉部分的补集。
    print(pythoners ^ linuxers)
    print(pythoners.symmetric_difference(linuxers))

    print(linuxers ^ pythoners)
    {'王大炮', '李二丫', '张全蛋', '艾里克斯', '欧德博爱', 'egon'}
    7、==
    s1={1,2,3}
    s2={1,2,3}
    print(s1 == s2)

    8、父集(包含关系):>,>=
    s1={1,2,3,4,5}
    s2={1,2,3}
    # print(s1 > s2) # s1包含s2
    print(s1.issuperset(s2)) # 判断s1是否是s2的父集。
    print(s2.issubset(s1)) # 判断s2是否是s1的子集。

    s3={1,2,10}
    print(s1 > s3)

    s1={1,2,3,4,5}
    s2={1,2,3,4,5}
    print(s1 >= s2)

    9、子集(被包含的关系):<,<=

    s1={1,2,3,4,5}
    s1.add(6)
    集合里面添加值
    s1.add(element)
    print(s1)
    s1.add((1,2,3))
    print(s1)

    s1.update({4,7,8,9}) # 注意去重
    print(s1)

    res=s1.pop() # 随机删除
    print(res)

    res=s1.remove(4) # 移除元素
    print(res) # 返回None
    print(s1)

    s1={1,2,3,4,5}
    s2={2,3,7,8}
    s1=s1 - s2
    print(s1)
    s1.difference_update(s2) # s1=s1 - s2 # 得到的差集赋值给s1
    print(s1)
    s1.difference(s2) # 只是单纯比较差集,不会把得到的差集赋值给s1
    print(s1)


    集合三种删除操作
    s1={1,2,3,4,5}
    res = s1.pop()
    print(res)
    # s1.remove(7) # 没有要删除的元素会报错
    s1.discard(7) # 即便要删除的元素不存在也不会报错

    s1={1,2,3,4,5}
    s2={5,6,7,8}
    print(s1.isdisjoint(s2)) # 判断是否有交集




    #二:该类型总结
    1 存一个值or存多个值
    可以存多个值,值都必须为不可变类型

    2 有序or无序
    无序

    3 可变or不可变
    set集合是可变类型
    s={1,2,3}
    print(id(s))
    s.add(4)
    print(s)
    print(id(s))



    =====================集合的去重==========================
    单纯的用集合去重,需要注意的问题是:
    1、去重的目标所包含的值必须都为不可变类型
    2、去重的结果会打乱原来的顺序
    names=['asb','asb','asb','wsb','wsb','egon_nb',[1,2,3]]
    s=set(names)

    names=list(s)
    print(names)

    stu_info=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'oldboy','age':84,'sex':'female'},
    ]

    new_info=[]
    for info in stu_info:
    if info not in new_info:
    new_info.append(info)

    print(new_info)


     

  • 相关阅读:
    利用Vista新技术WCF开发构建服务系统
    WCF开发入门的六个步骤
    C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(一)让物体动起来①
    silverlight
    初探C#3.0
    通过托管代码和 Windows Vista 智能卡 API 来保护您的数据
    用例图
    类图
    Win7下MSN显示两个窗口问题
    设计模式初探
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9121470.html
Copyright © 2011-2022 走看看