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

最新文章

  1. Java内存模型深度解析:总结--转
  2. opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
  3. ArcGIS中的VBA修复
  4. WebService &quot;因 URL 意外地以 结束,请求格式无法识别&quot; 的解决方法
  5. MPlayer-ww 增加边看边剪切功能+生成高质量GIF功能
  6. Chapter 5
  7. aspose.words复制插入同一word文档中的某个页面
  8. hihocoder 1037 数字三角形
  9. wpf RadioButton控件的一个bug,onpropertychanged后会修改旧属性的值
  10. 从ipad相机相册读取相片并保存
  11. 一个C#的XML数据库访问类
  12. openwrt下和云端通讯的例程,
  13. Django模板-模板标签
  14. Struts2-2.了解struts.xml&gt;package&gt;action&gt;result的name属性
  15. PostgreSQL 下生成 UUID(Guid)
  16. HDU - 1495 bfs [kuangbin带你飞]专题一
  17. 关于Kafka配额的讨论(1)
  18. mybatis-plus报org.apache.ibatis.binding.BindingException分析【转载】
  19. 如何利用iconfont图标代替小图片
  20. python---基于memcache的自定义session类

热门文章

  1. 图解 K8s 核心概念和术语
  2. JVM 垃圾收集算法 标记-清楚、标记-复制、标记-整理
  3. cg语言学习&amp;&amp;阳春白雪GPU编程入门学习
  4. tokitsukaze and RPG(暴力优化)
  5. 面试【JAVA基础】JVM
  6. js+canvas画随机4位验证码
  7. 11_Python的69个内置函数详解
  8. shell小技巧(2)查找文件时,排除几种类型文件
  9. uap设置gradle和jdk
  10. matplotlib | Python强大的作图工具,让你从此驾驭图表