python基础第四天

1、字典的创建

 

2、字典元素的访问

1、通过键的名称返回值,类似列表的访问a['name']

2、get(),指定键不存在时可以返回指定值

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

4、列出所有的键a.keys() ,列出所有的值a.values()

5、len()键值对的个数

6、检测一个键是否在字典中 in

>>> a={'name':'name','score':70}
>>> a['name']
'name'
>>> a.get('score')
70
>>> a.len()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'len'
>>> len(a)
2
>>> a.items()
dict_items([('name', 'name'), ('score', 70)])
>>> a.keys()
dict_keys(['name', 'score'])
>>> a.values()
dict_values(['name', 70])

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

1、给字典新增键值对,如果键已存在会覆盖

2、使用update()将新字典中所有键值对全部添加到旧字典中,如果value相同则覆盖

3、字典中元素的删除,可以使用del()方法,或者用clear()删除所有的键值对,pop()删除指定键值对并返回对应的值对象;

4、popitem()随机删除和返回该键值对,字典是无序可变序列,所以是弹出随机项。

>>> a
{'name': 'name', 'score': 70, 'sex': 'man'}
>>> b={'class':'weak','age':10}
>>> a.update(b)
>>> b
{'class': 'weak', 'age': 10}
>>> a
{'name': 'name', 'score': 70, 'sex': 'man', 'class': 'weak', 'age': 10}
>>> a.del('class')
  File "<stdin>", line 1
    a.del('class')
        ^
SyntaxError: invalid syntax
>>> del(a['class'])
>>> a
{'name': 'name', 'score': 70, 'sex': 'man', 'age': 10}
>>> a.pop('age')
10
>>> a
{'name': 'name', 'score': 70, 'sex': 'man'}
>>> clear(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'clear' is not defined
>>> a.clear()
>>> a
{}

del()是系统自带方法,update(),pop(),clear()都是dict的方法。

4、序列解包

序列解包可以用于元组列表字典。序列解包可以让我们方便的对多个对象赋值。

序列解包应用于字典时,默认是对键进行操作,如果对键值进行操作,需要使用items(),如果需要对值进行操作,则需要使用values()。

>>> s={'name':'xiaoyang','sex':'woman'}
>>> a,b=s
>>> a,b
('name', 'sex')
>>> c,d=s.items()
>>> c,d
(('name', 'xiaoyang'), ('sex', 'woman'))
>>> e,f=s.values()
>>> e,f
('xiaoyang', 'woman')

5、字典核心底层原理

5.1存储的底层过程

字典对象的核心是散列表,散列表是稀疏数组(总有空白元素的数组),数组的每个单元叫做bucket,每个bucket由两部分:一个是键对象的引用,一个是值对象的引用,由于所有bucket结构和大小一致,可以通过偏移量来读取bucket。

每个字典在创建时有一个默认大小,在存储过程中,对要存储的键先进行编码,根据一定的规则去依次填充字典,如哈希值的编码,如果所在位置为空,则直接填充,如果所在位置不空,则依次选择右旁边的位置进行填充,直到找到空的bucket。

python会根据散列表的拥挤程度扩容,创造更大的数组,将原有内容拷贝到新数组,接近三分之二时,数组就会扩容。

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

同样的,也是先计算要找的键的散列值,然后去相应位置去查找,如果不空,则进行一次比较,看所在位置的键对象的散列值是否相同,如果相同则返回键值对,不同则去旁边继续寻找,直到遍历所有,然后返回空。

总结。字典在内存中开销巨大,典型的空间换时间。键查询速度很快,往字典中添加新键可能会导致扩容,导致散列中键的次序变化,因此不要在遍历字典的时候进行字典的修改。

6、集合

集合时无序可变的,元素不能重复,集合底层是字典实现,集合的所有元素是字典的键对象,因此是不能重复且唯一的。

6.1集合创建和删除

1、使用{}创建集合对象,并使用add()添加元素

2、使用set()转化为集合

3、remove()删除指定元素,clear()清空整个集合

6.2集合相关操作

a|b 并集a.union(b)

a&b 交集a.intersection(b)

a-b差集a.difference(b)

代码略

7、pycharm安装

8、选择结构

选择结构通过判断条件是否成立,来决定执行哪个分支,分为单分支,双分支,多分支。

在循环结构中,条件表达式的值为False的情况如下:False,0,空值None,空序列对象(空字符串,空列表,空字典等),空range,空迭代对象。除此之外,均为True。

条件表达式中不能有赋值操作符‘=’

三元条件运算符

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

print('bingo' if 10>9 else 'wrong')

选择结构嵌套,选择结构可以嵌套使用时一定要注意空值好不同级别代码块的缩进量。

9、循环结构

while循环

while 条件表达式:

    循环体语句
a=5
while a<10:
    a+=1
    print(a)
b=0
c=0
while b<100:
    c+=b
    b+=1
print(c)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值