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)
Python-集合 字典-set dict fronzenset的更多相关文章
- Python集合&字典
Python集合&字典 @ 目录 字典 字典的几种定义方式 第一种 第二种 第三种 字典的一些基本操作 通过key得到value 增加字典键值对 删除字典键值对 格式化操作 清空字典 复制字典 ...
- Python基础——字典(dict)
由键-值对构建的集合. 创建 dic1={} type(dic1) dic2=dict() type(dic2) 初始化 dic2={'hello':123,'world':456,'python': ...
- python之字典(dict)基础篇
字典:dict 特点: 1>,可变容器模型,且可存储任意类型对象,字符串,列表,元组,集合均可: 2>,以key-value形式存在,每个键值 用冒号 : 分割,每个键值对之间用逗号 , ...
- Python集合字典运算符
1.集合2.字典3.运算符优先级 1.集合 创建:{} set([]) 注意:创建空的集合要用set() 特点:元素唯一,无序 运算: & 交集 | 并集 - 差集 方法: s ...
- Python数据类型--字典(dict)
Python中的字典是键值对(key-value)的无序集合.每个元素包含"键"和"值"两部分,这两部分之间使用冒号分隔,表示一种对应关系.不同元素之间用逗号分 ...
- python之字典【dict】
#Auther Bob#--*--conding:utf-8 --*-- #创建一个字典dictdic1 = {'k1':'v1','k2':'v2'}dic2 = dict(k1='v1',k2=' ...
- python初步学习-python数据类型-字典(dict)
字典 字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起.注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息. 注意,你只 ...
- Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict)
Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装和结构 #!/usr/bin/env pytho ...
- 27.Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解
本章将会介绍 Python 内置的四种常用数据结构:列表(list).元组(tuple).字典(dict)以及集合(set). 这四种数据结构一但都可用于保存多个数据项,这对于编程而言是非常重要的,因 ...
随机推荐
- js对象数组新增、修改时的验证是否重复的逻辑
JS代码: // 定义数据集合 const persons = [ { id: 1, name: '张三' }, { id: 2, name: '李四' } ] console.log('') con ...
- 【基础知识】Unity查漏补缺
最近发现了一些平时不太注重的知识点,特此建立个专题,把零散的东西.疏忽的东西临时记录下来. Mecanim动画系统: 1)设置AnimatorController时,如果某个动作播放不正常. 首先打开 ...
- [第二届全国中学生网络安全竞赛]bypass
前几天拿到了线下赛的源码,做做看.这道主要是命令执行的黑名单绕过 先看看给出的代码: <?php highlight_file(__FILE__); error_reporting(0); $b ...
- 关于给Tomcat设置maxPostSize的问题
一.为什么要设置maxPostSize tomcat容器对传输数据的大小有限制,如果上传了超过此值的文件,就会报错,使得程序不能正常使用. 二.设置方法 找到tomcat目录下的/conf/serve ...
- linux下开启防火墙,允许通过的端口
1.查看防火墙状态 systemctl status firewalld 2.如果不是显示active状态,需要打开防火墙 systemctl start firewalld 3.# 查看所有已开放的 ...
- 如何使用dockerfile将jar包生成镜像
1.编写dockersfile FROM java:8 ADD SPRINGCLOUD.jar app.jar RUN bash -c ‘touch /app.jar’ ENTRYPOINT [&qu ...
- 一条 SQL 引发的事故,同事直接被开除!!
前言 Insert into select请慎用. 这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份.本想通过程序先查询查出来然后批量插入.但xxx觉得这样有点慢,需要耗费大量的网络I ...
- 系统服务监控指标--load、CPU利用率、磁盘剩余空间、磁盘I/O、内存使用情况等
介绍 大型互联网企业的背后,依靠的是成千上万台服务器日夜不停的运转,以支撑其业务的运转.宕机对于互联网企业来说,代价是沉重的,轻则影响用户体验,重则直接影响交易,导致交易下跌,并且给企业声誉造成不可挽 ...
- [LeetCode]404. 左叶子之和(递归)、938. 二叉搜索树的范围和(递归)(BST)
题目 404. 左叶子之和 如题 题解 类似树的遍历的递归 注意一定要是叶子结点 代码 class Solution { public int sumOfLeftLeaves(TreeNode roo ...
- (专题四)06 matlab绘图选项卡
绘图选项卡 例子1--选择已有变量,绘制图形 都是按照选中的先后顺序依次确定坐标, 如果要修改绘制图形 法一,利用绘图工具和停靠图形按钮 法二,命令行窗口中输入命令 >>plottools ...