集合 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)

Python-集合 字典-set dict fronzenset的更多相关文章

  1. Python集合&字典

    Python集合&字典 @ 目录 字典 字典的几种定义方式 第一种 第二种 第三种 字典的一些基本操作 通过key得到value 增加字典键值对 删除字典键值对 格式化操作 清空字典 复制字典 ...

  2. Python基础——字典(dict)

    由键-值对构建的集合. 创建 dic1={} type(dic1) dic2=dict() type(dic2) 初始化 dic2={'hello':123,'world':456,'python': ...

  3. python之字典(dict)基础篇

    字典:dict 特点: 1>,可变容器模型,且可存储任意类型对象,字符串,列表,元组,集合均可: 2>,以key-value形式存在,每个键值 用冒号 : 分割,每个键值对之间用逗号 , ...

  4. Python集合字典运算符

    1.集合2.字典3.运算符优先级 1.集合 创建:{} set([]) 注意:创建空的集合要用set()   特点:元素唯一,无序   运算: & 交集 | 并集 - 差集   方法:   s ...

  5. Python数据类型--字典(dict)

    Python中的字典是键值对(key-value)的无序集合.每个元素包含"键"和"值"两部分,这两部分之间使用冒号分隔,表示一种对应关系.不同元素之间用逗号分 ...

  6. python之字典【dict】

    #Auther Bob#--*--conding:utf-8 --*-- #创建一个字典dictdic1 = {'k1':'v1','k2':'v2'}dic2 = dict(k1='v1',k2=' ...

  7. python初步学习-python数据类型-字典(dict)

    字典 字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起.注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息. 注意,你只 ...

  8. Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict)

    Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装和结构 #!/usr/bin/env pytho ...

  9. 27.Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解

    本章将会介绍 Python 内置的四种常用数据结构:列表(list).元组(tuple).字典(dict)以及集合(set). 这四种数据结构一但都可用于保存多个数据项,这对于编程而言是非常重要的,因 ...

随机推荐

  1. SpringCloud微服务项目实战 - API网关Gateway详解实现

    前面讲过zuul的网关实现,那为什么今天又要讲Spring Cloud Gateway呢?原因很简单.就是Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用 ...

  2. 企业站做seo用什么程序好

    http://www.wocaoseo.com/thread-306-1-1.html 随着互联网的兴起,越来越多的人通过网络来了解自已想了解的资讯,网络营销已经慢慢的取代了传统的营销模式.很多企业现 ...

  3. go语言之函数及闭包

    一:函数 1 概述: 函数是 Go 程序源代码的基本构造单位,一个函数的定义包括如下几个部分,函数声明关键字 也町. 函数名.参数列表.返回列表和函数体.函数名遵循标识符的命名规则, 首字母的大小写决 ...

  4. 学习一下 JVM (三) -- 了解一下 垃圾回收

    一.简单了解几个概念 1.什么是垃圾(Garbage)?什么是垃圾回收(Garbage Collection,简称 GC)? (1)什么是垃圾(Garbage)? 这里的垃圾 指的是 在程序运行过程中 ...

  5. Apache Pulsar 社区周报:08-08 ~ 08-14

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

  6. 在 Visual Studio for Mac 中编译和生成

    使用Visual Studio将C#生成DLL文件的方法 https://www.cnblogs.com/AaronBlogs/p/6840283.html Visual Studio 开发 - Vi ...

  7. Spine学习七 - spine动画资源+ Unity Mecanim动画系统

    前面已经讲过 Spine自己动画状态机的动画融合,但是万一有哥们就是想要使用Unity的动画系统,那有没有办法呢?答案是肯定的,接下来,就说说如何实现: 1. 在project面板找打你导入的Spin ...

  8. 终于开始了,微软的野心将通过全场景开发平台dotnet 5体现得淋漓尽致!

      本文已经同步到微信公众号「极客起源」 . 现在都在谈论全场景开发,也就是用一套开发工具,可以开发包括但不限于桌面.移动.IOT.游戏.Web等平台的应用.这样对于开发人员是非常爽的.本文将介绍微软 ...

  9. [Java数据结构]使用Stack检查表达式中左右括号是否匹配

    Stack是一种先进后出的数据结构后,这个特点决定了它在递归向下的场景中有独到的功效. 以下程序展示了它在检查表达式中括号匹配的有效性: 程序: package com.heyang.util; im ...

  10. Webpack 打包优化之体积篇

    谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝 ...