Python学习day4

元组

1.元组的创建

a=(40,50,60)
a=40,50,60
a=(100,)    #单元素的元组对象必须要加一个逗号,否则会被识别成整型

a=tuple("abc")
b=tuple([1,2,3])    #tuple里面数字必须是列表对象构成,否则就直接填入元素创建
c=tuple(range(3))
print(a)
print(b)
print(c)
#元组与字符串相同,本身不可以被修改
'''
slice操作、index、count等操作与列表完全相同
'''
a=tuple([10,20,30,40,50])
b=sorted(a)
print(b)
#元组的排序只能用sorted()进行,会生成一个新的对象,且新对象是一个列表

a=[10,20,30]
b=[40,50,60]
c=[70,80,90]
d=zip(a,b,c)    #一列为一个元组
print(list(d))
#zip函数会生成一个迭代器,将列表转化为元组,个数与最短的列表保持一致

2.生成器创建元组

a=(x for x in range(10))
print(tuple(a)) #元组
'''
a是一个推导式生成的生成器对象,并不是元组本身,它可以通过list或者tuple创建为列表或元组
生成器是一次性的,它依次取出生成器里面的对象,类似指针,生成完成就会把指针放到末尾
再次访问必须新建一个生成器
'''
#也可以利用a.__next__()进行遍历,依次返回一个对象,并将指针后移

字典

1.字典的创建

#字典通过任意不可变对象作为键来找到值,而其他的序列主要通过下标
a={"name":"jim","age":18,"job":"student"}
print(a.get("name"))
#字典的标准创建,用大括号、冒号组合

b=dict(name="jim",age=18)
print(b)
#dict()创建的项目名称不需要引号,只需要字符串和=组合
#也可以用 b=dict([("name","jim"),("age",18)]) 与上面的相同

'''
a=["name","age","job"]
b=["jim",18,"student"]
c=zip(a,b)
print(list(c))
#这是创建一个含有元组的列表,将列表压缩
'''

a=["name","age"]    #一组是键
b=["jim",18]    #一组是值
c=zip(a,b)
d=dict(c)
print(d)
#这是用压缩命令将两个列表压缩起来以后,用dict()创建,不能压缩两个以上,只适用于键、值两个列表的情况
#{'name': 'jim', 'age': 18} 一个个对应的是键值对

#但是以上方式都不能创建值为空的字典

a=dict.fromkeys(["name","age","job"])
print(a)
#{'name': None, 'age': None, 'job': None} 值为空

2.字典元素的增加、删除和修改

a={"name":"jim","age":18,"job":"student"}
a["address"]="toilet"
a["age"]=38 #已经存在的键值对可以重新定义
print(a)


a={"name":"jim","age":18,"job":"student"}
b={"name":"Jim","age":21,"job":"student","sex":"male"}
a.update(b)
print(a)
#会用新的字典更新老的字典,同名被覆盖,不同的新增

a={"name":"jim","age":18,"job":"student"}
del a["name"]
print(a)
#与列表中的相同

a={"name":"jim","age":18,"job":"student"}
b=a.pop("age")  #指定删除并返回
c=a.popitem()   #随机删除并返回,因为字典无序,当需要清空时可以用
print(b,c)

3.字典元素的访问和查询

a={"name":"jim","age":18,"job":"student"}
print(a["name"])    #如果查询的键不存在会抛出异常
print(a.get("name"))
print(a.get("num","不存在"))   #查询不到,可以设定一个返回值,默认返回None
'''
字典是一个无序可改变序列,所以不能通过0,1,2的位置进行索引
'''

a={"name":"jim","age":18,"job":"student"}
print(a.items())    #键值对
print(a.values())   #值
print(a.keys())     #键

print(len(a))   #键值对个数,len函数可以应用于所有序列中
print("name" in a)  #判断是否存在

4.字典序列解包赋值

#序列解包可以应用于整数,列表,元组等等
a,b,c=1,2,3
print(a)
(a,b,c)=(4,5,6)
print(a)
[a,b,c]=(7,8,9)
print(a)
'''
序列解包赋值的应用
'''

s={"name":"jim","age":18,"job":"student"}
#a,b,c=s    默认是对键的赋值 即a="name"
a,b,c=s.items() #修改为键值对输出是一个元组
print(a)
a,b,c=s.keys()
print(a)
a,b,c=s.values()
print(a)

5.字典存储和查找的底层原理

a={}
a["name"]="Jim"
'''
a是一个空字典,此时加入一个键值对("name","Jim")
如果数组长度假设为8,那么就会取"name"这个键名的散列值的右边3位 bin(hash("name"))
找到索引的bucket,如果为空则放入,如果已有键值对,则左移三位继续依次比较,直至可以放入
而当数组被填充到2/3时,便会扩容
'''
a.get("name")
'''
过程同样是对于键名散列值的查询,查询到bucket后计算二者散列值是否相等,相等则取出
不相等时继续向左次依次比较散列值
'''

6.字典和列表的综合嵌套

用于存储多项平行的数据

r1={"name":"高小一","age":18,"salary":30000,"city":"北京"}
r2={"name":"高小二","age":19,"salary":20000,"city":"上海"}
r3={"name":"高小三","age":21,"salary":10000,"city":"深圳"}
#每一行的信息存入一个字典中
tb=[r1,r2,r3]
#放入列表中
print(tb)
#获得第二个人的薪资
print(tb[1].get("salary"))

#打印所有人的薪资
for i in range(3):
    print(tb[i].get("salary"),end="\t")
print()

for i in range(len(tb)):
    if tb[i].get("salary") > 15000:
        print(tb[i].get("salary"))

#打印所有数据
for i in range(3):
    print(tb[i].get("name"),tb[i].get("age"),tb[i].get("salary"),tb[i].get("city"))

7.集合

集合的底层是字典,本质上存储的都是键,是无序可变的序列

#集合也是字典的一种,无序可变序列,且元素不可以重复
a={20,30,40,"jim"}
#集合本质上是一个个的键,键名不可能重复

a.add(50)
print(a)
#添加元素使用add函数,但并不会在末尾,这与键的hash有关;remove函数与列表相同

a=[20,30,40,50,20]
b=set(a)    #list->集合
print(b)
#可以将列表转化为集合,且消除相同元素

a="jim happy"
b=set(a)
print(b)
#字符串也可以变为集合,拆分为单个的字符

a={1,2,3,4,"jim"}
b={2,"jim",4,5,6,"sxt"}
print(a|b)
print(a&b)
print(a-b)  #差集是指a里面与b有差异的部分,输出的是a去掉交集后的内容
'''
union 并集;intersection 交集;difference 差集
'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值