基本数据类型
字典
字典就是键值对的无序可变序列,每个元素叫键值对,包含键对象和值对象。可通过键对象实现获取删除更新对应 值对象
键
是任意的不可变数据,但是列表
、字典
、集合
这些可变对象,不能作为 键。并且 键 不可变。- “值”可以是任意的数据,并且可重复。
定义方式:a={‘name’:‘gaoqi’,‘age’:18,‘job’:‘programmer’} 通过键 到 值
字典的创建:
- {}、dict()
- zip()
- fromkeys 创建为空的字典
字典的访问
- [键] 的方式
- get(键) 键不存在 返回NONE
- 列出所有键值对
- 列出所有键
- len()检测键值对个数
- in 检测 键 是否在字典中
字典添加 删除
- a[‘address’]=‘八九十个’ 键重复 则会覆盖
- update() 将新字典所有键 覆盖 重复会覆盖
- del() 元素删除 del(a[‘name’]) ;clear() 所有键值对删除 a.clear();pop() 删除元素并得到元素对应 值对象
- popitem() 随机删除并返回该键值对
序列解包
可用于 元组 列表 字典
a,b,c=10,20,30 a=10
字典 键a,b,c=s 值d,e,f=s.values() 键值对h,i,g=s.items()
字典核心原理
散列表是一个稀疏数组(有空白元素的数组),数组的 每个单元 bucket。 bucket 两部分:键对象的引用,值对象的引 用。由于 bucket 结构和大小一致,可以通过偏移量来读取 bucket。
键值放入的底层过程
固定长度后 通过hash()
计算 散列值 以此取右往左几位的数字做偏移量,依次找到对应的bucket 满了就换位置 2/3都满了 则进行扩容
操作
操作流程图如下
而对于键取值的过程,先进行hash()取得散列值,安后几位寻找,依次寻找的散列值进行比较,相同即为目标。不同则按前几位继续寻找,直道找到。过程流程图如下
集合
集合 : 无序可变,且不能重复 底层实施字典的实现,元素是字典的“键对象”
创建:
- {}直接创建,add()方法添加
- set() 将列表及元组可迭代对象转换成集合 重复内容只保留一个
- remove() 删除指定元素 ;clear() 全部清空
相关操作:
- 并集 a|b 或 a.union(b)
- 交集 a&b 或 a.intersection(b)
- 差集 a-b 或 a.difference(b)
第四章 控制语句
选择结构 分单只与多支
单支结构:
if 条件表达式:
语句/语句块
单支中条件表达式的值为 False 的情况: False、0、0.0、空值 None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)、空 range 对象、空迭代对象。
注意:条件表达式中,不能有赋值操作符“=”
双分支选择结构:
if 条件表达式 :
语句 1/语句块 1
else:
语句 2/语句块 2
三元条件运算符 更加简洁
条件为真时的值 if (条件表达式) else
多分支选择结构
多分支选择结构的语法格式如下:
if 条件表达式 1 :
语句 1/语句块 1
elif 条件表达式 2:
语句 2/语句块 2
…
elif 条件表达式 n :
语句 n/语句块 n
[else:语句 n+1/语句块 n+1 ]
如果每个分支都使用了独立的、完整的判断,顺序可以随意挪动,而不影响程序运行。
选择结构嵌套
选择结构可以嵌套,注意控制缩进量,决定了 代码的从属关系
语法格式如下:
if 表达式 1:
语句块 1
if 表达式 2:
语句块 2
else:
语句块 3
else:
if 表达式 4:
语句块 4
循环结构
while 循环的语法格式如下:
while 条件表达式:
循环体语句