• 集合(set)


    引子:

      在之前我们要拿到交集只能是用循环判断。

      l = ['张三','李四','老男孩']

      p = ['张三','李四','alex']

      现在要找出既在linux班上课也在python班上课的学生,应该怎么找?

      

    l = ['张三','李四','old_drivers']
    p = ['张三','李四','goodboy']
    l_p = []
    for i in l:
        if i in p:
            l_p.append(i)
    print(l_p)

    集合是一个数学概念:有一个或多个确定的元素所构成的整体叫做集合,无序的。

    特征:

      1、确定性(元素必须可hash)

      2、互异性(去重,把一个列表变成集合,就自动去重了)

      3、无序性(集合中的元素没有先后之分,如集合{}3,4,5}和{3,5,4}算作一个集合)

      注意点:集合存在的意义就在于去重和关系运算

    语法:

      定义集合:s = {}

      列表转成集合:set() 元组也可以转

    #列表转集合
    l = {1,2,3,4,5,6,2,7,8,4,3}
    set(l)
    print(l)
    ##增删改查
    l = {1,2,3,4,5,6}
    l.add(7) #增加
    print(l)
    print(l.pop()) #删除并返回,随机删
    l.remove(5) #删除指定的值
    l.discard(5) #删除指定的值,不存在不会报错
    l.update([5,6,7,8,9,2]) #扩展,增加多个值
    l.clear() #清空所有的值
    l.copy() #浅拷贝 print(l)

    包含关系:

      in, not in :判断某元素是否在集合内

      ==,!= :判断两个集合是否相等

      

    ##关系测试
    l = {'张三','李四','old_drivers'}
    p = {'张三','李四','goodboy'}
    print(l.intersection(p))   #交集,intersection
    print(l&p)   #交集,&--->and符号
    print(l.difference(p)) #差集,只在l中不在p中
    print(l - p) #差集,只在l中不在p中
    print(p.difference(l)) #差集,只在p中不在l中
    print(p - l) #差集,只在p中不在l中
    print(l.union(p))   #并集,两个集合相加
    print(p | l)  #并集,两个集合相加
    print(l.symmetric_difference(p)) #对称差集
    print(l ^ p) #对称差集
    l = {'张三','李四','old_drivers','goodboy'}
    p = {'张三','李四','goodboy'}
    print(p.issubset(l))   #判断p 是不是 l的子集 p <= l
    print(p.issuperset(l))   #判断p 是不是 l的父集 等同于 p>= l
    print(p.isdisjoint(l)) #判断两个集合是不是不相交
    print(p.difference_update(l))  #把差集赋值给p
    print(p.intersection_update(l))  #把交集赋值给p

    练习:

      

     一.关系运算
      有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
      pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
      linuxs={'wupeiqi','oldboy','gangdan'}
      1. 求出即报名python又报名linux课程的学员名字集合
      2. 求出所有报名的学生名字集合
      3. 求出只报名python课程的学员名字
      4. 求出没有同时这两门课程的学员名字集合
    #  1. 求出即报名python又报名linux课程的学员名字集合
    print(pythons.intersection(linuxs))
    print(pythons & linuxs)
    View Code
    #  2. 求出所有报名的学生名字集合
    print(linuxs.union(pythons))
    print(pythons | linuxs)
    View Code
    #  3. 求出只报名python课程的学员名字
    print(pythons.difference(linuxs))
    print(pythons - linuxs)
    View Code
    #  4. 求出没有同时这两门课程的学员名字集合
    print(pythons.symmetric_difference(linuxs))
    print(pythons ^ linuxs)
    View Code
  • 相关阅读:
    Java小白集合源码的学习系列:Vector
    Java小白集合源码的学习系列:LinkedList
    707.设计双向链表
    Java小白集合源码的学习系列:ArrayList
    Leetcode动态规划【简单题】
    小白学Java:老师!泛型我懂了!
    小白学Java:包装类
    Java面向对象之异常详解
    Java面向对象之异常【一】
    浅谈Java中接口与抽象类的异同
  • 原文地址:https://www.cnblogs.com/chris3201/p/8926910.html
Copyright © 2020-2023  润新知