• Python-集合 字典-set dict fronzenset


    集合 set
      1. 无序
      2. 去重
      3. 定义空集 set()

    numbers = {1, 3, 4, 5, 6, 5, 4, 4, 7, 8}
    print(numbers)
    print(numbers)

    集合操作
      1. 求差集    -     .difference
      2. 求交集    &   .intersection
      3. 求并集   |    .union

    student_python = {"xiaoWang", "xiaoMing", "lvChaBiao", "baiLianHua"}
    student_golang = {"xiaoWang", "beimenchuixue", "ximenchuifeng"}
    
    print("only study python student: ", student_python - student_golang)
    print("study python and golang student: ", student_python & student_golang)
    print("total students : ", student_python | student_golang)

    集合更新元素

      1. 添加一个元素         add

      2. 添加多项           update

      3. 删除一项,不存在,报错    remove

      4. 安全删除,没有则返回None     discard

    students = {"BeiMenChuiXue","QiNiuYun", "BoKeYuan"}
    # 添加一个元素
    students.add("JinRiTouTiao")
    print(students)
    
    # 添加多个元素
    students.update(["TengXun", "DouYing"])
    print(students)
    
    # 删除一项
    students.remove("TengXun")
    print(students)
    
    # 安全删除
    print(students)
    status = students.discard("JinRiTouTiao")
    if status == None:
        print("rm success")
    else:
        print("rm fail")
    print(students)
    

    集合判断

      1. 子集             issubset

      2. 父集             issuperset

      3. 交集             isdisjiont

    python_class = {"BeiMenChuiXue", "QiNiuYun", "AliYun"}
    golang_class = {"BeiMenChuiXue", "QiNiuYun"}
    
    # 判断子集
    if golang_class.issubset(python_class):
        print("golang_class -> python_class")
    else:
        print("golang_class !-> python_class")
    
    # 判断父集
    if python_class.issuperset(golang_class):
        print("python_class <- golang_class")
    else:
        print("python_class !<- golang_class")
    
    # 判断交集,无交集则返回真,或者有空交集返回真
    if python_class.isdisjoint(golang_class):
        print("陌路")
    else:
        print(python_class & golang_class)
    

     

    fronzet

      一旦定义,无法修改的集合

    字典 dict

      1. 定义空字典 dict() {}
      2. 无序
      3. key去重, 有重复key取最后的key对应的value值
      4. {key: value,...}
      value任意类型: int float bool str list tuple set dict
      key必须是不可变类型 int float bool str tuple

    student_score = {
        "xiaoWang": 99,
        "xiaoLi": 77,
        "beimenchuixue": 99,
        "lvChaBiao": 90,
        "ximenchuifeng": 88
    }
    
    print(student_score.get("beimenchuixue", None))
    print(student_score.pop("lvChaBiao"))
    student_score.update({
        "xiaoWang": 66,
    })
    print(student_score)
    print(student_score.items())
    print(student_score.keys())
    print(student_score.values())

    访问
      1. 通过key访问value [key]
      2. 安全访问方式 .get()

    set 和 dict实现原理   hash表(连续内存空间,存在空白空间)

      带来特性:

        1.  dict查找的性能远远大于list

        2.  list随着list数量的增长, 查找时间会增大

        3.  查找在dict中不会随着dict增大而增大

    dict 原理实现过程  

      dict存入数据过程
        1. 对 key进行 hash运算 ,再进行偏移量 -> 计算出放入位置
        2. 位置冲突则,对key取一个值,再加上一个随机值,如果再冲突则再多取一个值,加上随机值 -> 计算得到放入位置
        # 直接找到值,时间复杂度为 O(1)
      查找过程
        1. 计算key的hash值
        2. 用hash值的一部分定义hash表中位置
        3. 判断表元是否为空,为空则keyError
        4. 判断key是否相等,如果不相等则再次取hash值的另外部分进行查找,如果找到则直接返回表元数据

    set 必须是可hash, dict的key必须是可hash

    dict内存花销大,源于hash表的特性,查询速度快,添加数据有可能改变数据顺序(重新分配hash表和插入冲突解决机制)

    判断一个元素是否在集合中和字典的key是否在字典中 in

    student_score = {
        "xiaoWang": 99,
        "xiaoLi": 77,
        "beimenchuixue": 99,
        "lvChaBiao": 90,
        "ximenchuifeng": 88
    }
    
    print("xiaoWang" in student_score)
    print(99 in student_score)
    
  • 相关阅读:
    上班啦!
    用命令测试maven是否安装成功和创建maven java项目和maven javaweb 项目demo
    String部分
    将Linux虚拟机与本地主机组成局域网
    Maven部分
    JavaSe一个月一些笔记和感想
    Linux一些指令
    maven项目编译后没有生成target/class文件部分解决方案
    7、学习《细说PHP》笔记 七
    12、borderstyle样式边框风格属性
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/9062016.html
Copyright © 2020-2023  润新知