2022/1/20作业

字典

字典是“键值对”,元素即是“键值对”,包含:“键对象”与“值对象”。

“键”是任意的不可变的数据,比如:整数、浮点数、字符串、元组

列表、字典、集合这些可变对象,不能作为“键”

字典的创建

1、可以通过{}、dict{}来创建字典对象

>>> a = {‘name’:’zz’}

>>> b = dic(name = ‘zz’)

2、通过zip()创建字典对象

>>> k = [‘name’,’age’,’job’](键)

>>> v = [‘zz’,’11’,’vvv’](值)

>>> d = dic(zip(k,v))

>>> d

{‘name’:’gaoqi’,’age’:’18’,’job’:’techer’}

3、通过fromkeys创建值为空的字典

>>> a = dict.fromkeys([‘name’,’age’,’job’])

>>> a

{‘name’:None,’age’:None,’job’:None}

字典元素访问

 为了测试各种访问方法,设定了一个字典对象:

1、通过[键]获得“值”。若键不存在,则返回异常

 >>> a = {‘name’:’zz’,’age’:’18’,’job’:’programmer’}

 >>> a[‘name’]

>>> a[‘age’]

>>> a[‘sex’]没有的报错

2、通过get()方法活得“值”。推荐使用。优点是:即使指定键不存在,也返回None

列出所有的项目:a.item()   列出所有的键:a.keys()  列出所有的值:a.values()

len() 键值对的个数

检测一个“键”是否在字典中

>>> a = {“name”:”gaoqi”,”age”:18}

>>> “name” in a

True

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

添加

a=[“address”] = “西三角”,键如果重复,直接覆盖

使用update()将新字典中所有键值覆盖原键值

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

popitem():随机删除和返回该键值对。

序列解包

可用于元组、列表、字典、序列解包

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

>>> x     20

>>>(a,b,c)=(9,8,10)

>>>a

9

>>>[a,b,c] = [10,20,30]

>>> a

10

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

a1 = {“name” : ”高小一”,“age” : 18, “salary” : 30000, “city” : “北京”}

a2 = {“name” : ”高小二”,“age” : 18, “salary” : 20000, “city” : “上海”}

a3 = {“name” : ”高小五”,“age” : 20, “salary” : 10000, “city” : “深圳”}

tb = [a1,a2,a3]

#获得第二行的人的薪资

print (tb[1].get(“salary”))

#打印表中所有的薪资

a1 = {"name":"高小一","age":18,"salary":30000,"city":"北京"}
a2 = {
"name":"高小二","age":18,"salary":20000,"city":"上海"}
a3 = {
"name":"高小五","age":20,"salary":10000,"city":"深圳"}
tab = [a1
,a2,a3]
for i in range(len(tab)):
   
print(tab[i].get("salary"))

#打印全部表格

a1 = {"name":"高小一","age":18,"salary":30000,"city":"北京"}
a2 = {
"name":"高小二","age":18,"salary":20000,"city":"上海"}
a3 = {
"name":"高小五","age":20,"salary":10000,"city":"深圳"}
tab = [a1
,a2,a3]
#打印表的所有数据
for i in range(len(tab)):
   
print(tab[i].get("name"),tab[i].get("age"),tab[i].get("salary"),tab[i].get("city"))

字典核心底层原理(重要)

     字典对象的核心是散列表,散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket.每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。

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

     >>> a.get(“name”)

      ‘zz’

     >>> bin(hash(“name”))通过哈希算法

      ‘-0b1010111101001110110101100100101

用法总结:

1、键必须可散列

  1. 数字、字符串、元组、都是可散列的。
  2. 自定义对象需要支持下面三点

支持hash()函数

支持通过_eq_()方法检测相等性

若 a==b为真,则hash(a)==hash(b)也为真

2、字典在内存中开销巨大,典型的空间换时间。

3、键查询速度很快

4、往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字典的同时进行字典的修改

集合

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

集合创建和删除

  1. 使用()创建集合对象,并使用add()方法添加元素

>>> a = {3,5,7}

>>> a

{3,5,7}

>>> a.add(9)

>>> a

{9,3,5,7}

  1. 使用set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则只保留一个。

>>> a = [‘a’,’b’,’c’,’b’]

>>> b = set(a)

      >>>  b

     {‘b’,’a’,’c’}

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

>>> a = {10,20,30,40,50}

>>> a.remove(20)

{10,50,30}

集合相关操作

 

选择结构

        

a = input("请输入一个数字:")

if int(a)<10:
   
print(a)

条件表达式:

在选择和循环结构中,条件表达式的值为False的情况如下:

     False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range对象、空迭代对象。

其他情况,均为True。

条件表达式中,不能有赋值操作符 “=”

在Python中,条件表达式不能出现赋值操作符”=”,避免了其他语言中经常误将关系运算符“==”写作赋值运算符“=”带来困扰。

If / else

多项并列时,可以用if、elif、elif、elif、elif、、、、(或用else收尾)

多分支结构,需具有逻辑关系,不能随意颠倒顺序。

score = int(input("请输入分数"))
grade =
""
if score<60:
    grade =
"不及格"
elif score<80:
    grade =
"及格"
elif score<90:
    grade =
"良好"
else:
    grade =
"优秀"
print("分数是{0},等级是{1}".format(score,grade))

选择结构嵌套

选择结构可以嵌套,使用时

一个有意思的小玩意

score = int(input("请输入一个分数"))
degree =
"ABCDE"
num = 0
if score>100 or score<0:
   
print("请输入一个0-100的分数")
else:
    num = score//
10
   
if num <6:
        num =
5
   
print(degree[9-num])

循环结构:

         

while循环:

1 、(1-10)循环

 num = 0

 while num<10:
print(num)

num += 1

2、(1-100加法)

num = 1
sum_all= 0
while num <=100:
    sum_all=sum_all + num
    num +=
1
print(sum_all)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值