Python基础知识Chapter4

字典

字典是"键值对"的无序可变序列,字典中的每一个元素都是一个'键值对',包含"键对象"和"值对象"

字典通过"键对象"找到对应的"值对象",键是任意不可变数据:数字、字符串、元组,但列表、字典、集合这些可变对象不能作为键。

键不可重复

字典的创建

1.花括号{}

如a={"name":"gaoqi","age":"18"}

a={} 空的字典对象

2.dict() 空的字典对象

b=dict(name='gaoqi',age='18')

3.dict[]

a=dict[("name","gaoqi"),("age","18")]

4.zip()

如k=["a","b","c"]

v=[100,200,300]

d=dict(zip(k,v)) 在前的是键,在后的是值

5.dict.fromkeys(['name','age','job'])

字典元素的访问

1.直接使用中括号 a.[]

2.使用a.get() 推荐,若键不存在返回None

a.items() 列出所有的键值对

a.keys() 列出所有的键

a.values() 列出所有的值

len()键值对的个数

检测一个键是否在字典中

'name' in a

True

字典元素添加、修改、删除

1.给字典新增''键值对",如果"键"已存在,则覆盖旧的键值对,如果不存在,则新增键值对

>>>

2.使用update()将新字典中的所有键值对全部添加到旧字典上,如果key有重复,则直接覆盖。

>>>a={'name':'gaoqi','age':'18','job':'programmer'}
>>>b={'name':'gaoxixi','money':'1000','sex':'男的'}
>>>a.update(b)
>>>a
{'name':'gaoxixi','age':'18','job':'programmer','money':'1000','sex':'男的'}

指定元素的删除:del() 删除所有:clear()

pop()删除指定键值对,并返回值对象

>>>a={'name':'gaoqi','age':'18','job':'programmer'}
>>>del(a['name'])

popitem():随机删除和返回该键值对。字典是'无序可变序列',因此没有第一个、最后一个或其他关于顺序的概念,可以使用popitem()弹出随机的项,若想一个接一个地移除并处理项,此方法很有效。

序列解包

序列解包可用于列表、元组、字典,方便地对多个变量进行赋值

>>>x,y,z=10,20,30
>>>[x,y,z]=[10,20,30]
>>>(x,y,z)=(10,20,30)

当对字典进行操作时,默认是对'键'进行操作,若需要对键值对进行操作,使用items(),若需要对值进行操作,使用values()

>>>s={'name':'gaoqi','age':'18','job':'teacher'}
>>>name,age,job=s  #默认对键进行操作
>>>name
name
>>>name,age,job=s.items() #对键值对进行操作
>>>name
('name','gaoqi')
>>>name,age,job=s.values()  #对值进行操作
>>>name
'gaoqi'

表格数据使用字典和列表存储,并实现访问

biaoge.py

所有的数据都可以使用表格来表示

字典核心底层原理

字典对象的核心是散列表,散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫bucket(表元)。

每个bucket有两个部分:键对象的引用、值对象的引用

由于bucket大小一致,可以通过偏移量来引用、读取指定bucket

1.将键值对放进字典的底层过程

把'name'='gaoqi'这个键值放入字典对象中,第一步需要计算'name'的散列值(哈西值),可通过hash()来计算

由于数组长度为8,则可以拿出最右边3个数作为偏移量,即101,即为5,查看5是否为空,若不为空则再取右边三位,即100,4,再看4是否为空,直到找到空的bucket放进去为止。

扩容

python根据散列表的拥挤程度扩容,当接近2/3时,数组就会扩容。

根据键查找键值对的底层过程

>>>a.get("name")
'gaoqi'

Step1:计算"name"对象的散列值:

同上,找到偏移量,若为空,返回None,若不为空,返回值对象

总结

1.键必须可散列:数字、字符串、元组。自定义对象需满足三点

2.字典内存开销巨大,空间换时间

3.往字典中添加新键可能导致扩容

集合

集合是无序,可变,元素不能重复(集合的底层是字典,全是键对象)

,因此是不能重复且唯一的

集合创建和删除

1.{}创建,add()方法添加元素

2.set()将列表、元组等可迭代对象转成集合,若有重复元素只能把保留一个

3.remove()删除指定元素,clear()清空

集合相关操作

>>>a={1,3,'sxt'}
>>>b={'he','it','sxt'}
>>>a|b   #并集
{1,3,'sxt','he','it'}
>>>a&b   #交集
{'sxt'}
>>>a-b   #差集
{1,3}
>>>a.union(b)  #并集
{1,3,'sxt','he','it'}
>>>a.intersection(b)  #交集
{'sxt'}
>>>a.difference(b)  #差集
{1,3}

控制语句

选择结构

单分支选择结构

if 条件表达式:+语句/语句块

条件表达式

条件表达式值为False的情况如下:

False,0,0.0,空值,空序列对象、空range对象

条件表达式中不能出现赋值符号=

需用等于判断 ==

双分支结构

if :

else:

python给了三元运算符,用于简单双分支赋值情况,语法如下:

条件为真时的值 if (条件表达式) else 条件为假时的值

num=input("请输入一个数字")
print(num if int(num)<10 else "数字太大")

多分支结构

语法结构如下:

if expression1:

phrase1

elif expression2:

phrase2

·

·

·

elif expression n:

phrase n

[else:

phrase n+1

]

几个分支之间是有逻辑关系的,不能随意调换顺序

选择结构的嵌套

选择结构可以嵌套,但一定要注意好缩进量

循环结构

while循环

语法如下:

while 条件表达式:

循环体语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值