Python可迭代对象(2)

目录

3。字典

字典的构造

字典的添加和修改

字典推导式的使用

以上全部代码编译结果展示

字典复习

4。集合(set)

集合的创建

集合的运算

集合的添加和删除元素

以上全部代码的编译结果

序列解包(Sequence unpacking)


3。字典

字典的构造

#字典(dict)---map的简化版
# ◆ 字典dict是无序、可变序列。所有的元素放在一对大括号{}中。
# ◆ 字典的每个元素是用冒号分隔的键值对,即:key : value,元素之间用逗号分隔。#好,经典的KV模型,通过C++的map的学习可以猜想会不会也是通过K的值来取V的值
# ◆ 字典中的每个key都是唯一的且只能为不可变数据 (如数字、字符串、元组等)。而
# value可以是任意类型的对象。
# ◆ 字典创建:通过花括号 {} 或 dict() 函数来创建字典。
# ◆ 字典的应用场景很广泛,如,通过学号获取学生姓名,通过水果名称获取价格等。
# ▪以键作为下标可以读取字典元素,若键不存在则抛出异常。
# ▪使用get()方法获取指定键对应的值,当键不存在的时候返回None或指定值。
# ◆ items()方法可以返回字典所有的元素。
# ◆ keys()方法可以返回字典所有的“键”。
# ◆ values()方法可以返回字典所有的“值”


ret1 = dict({'apple' : 1, 'banana' : 2, 'peach' : 5, 'pear' : 3})#字典创建:通过dict() 函数来创建字典。
ret2 = {'apple' : 1, 'banana' : 2, 'peach' : 5, 'pear' : 3}#字典创建:通过花括号 {}, 可以看出dict()函数又是一个很鸡肋的东西
print(f"{ret2['apple'] = }")#字典就是通过K的值来取到V的值的,所有就是K(键)V(值)模型,这里的K值就是类似于V的下标一样的东西
print(f"{ret2['apple']}")
# ▪使用get(K,(V))方法获取指定键K对应的值V,当键不存在的时候返回None或指定值。
print(ret2.get('orange'))
print(ret2.get('orange', 0))
print(ret2.get('orange', 2))#当使用get取值时强制给不存在的键赋一个值时,就不会打印None了,因为这样会默认给了一个键值,这样就有键值了然后打印这个键值作为返回值
print(ret2.get('pear'))
print(ret2.get('pear', 7))#当使用get取值时强制给有键值的键赋一个新的值是没有用的,不会打印这个新的值仍会打印这个旧值
print(ret2.values())#打印全部键值的V,有一个s
print(ret2.keys())#打印全部键值的K,有一个s
# ◆ items()方法可以返回字典所有的元素
print(f'{ret2.items() = }')

字典的添加和修改

# ◆当用指定键为字典赋值时,执行结果分两种情况:
# 1)若键存在,则可以修改该键的值;
# 2)若键不存在,则添加该键:值对。
# ◆ 使用update()方法将另一个字典的键 : 值对,添加到当前字典对象。
# ◆ del:删除键值对,或删除字典。 例:del my_dict [‘age’];或 del my_dict
# ◆ clear()方法:清空字典中所有元素。例:my_dict.clear() # 清空字典
# ◆ pop(key)方法:删除并返回指定键的值。例:my_dict.pop('banana')
# ◆ popitem()方法:删除并返回字典中最后的key:value对。无参数。例:myDict.popitem()


ret3 = {'apple' : 1, 'banana' : 2, 'peach' : 5, 'pear' : 3, 'orange' : 6}
ret2.update(ret3)#update的作用是将()里面的字典的键值对更新到调用此函数的字典中,要求更新过去的字典的键值对必须比待更新的
print(ret2) #字典的键值对多,否则更新了不会有什么变化
ret3.update(ret2)
print(ret3)
del ret3['apple']#del:删除键值对,或删除字典, 删除K的值,V就跟着没有了,这两个是绑定关系
print(ret3)
print(ret3.pop('pear'))#pop(key)方法:删除并返回指定键的值。
print(ret3)
ret3.popitem()#popitem()方法:删除并返回字典中最后的key:value对。无参数。
print(ret3)
print("/")
#popitem()实例
ret4 = {}
ret4['apple'] = 3#增加元素
ret4['grtrbb'] = 4
ret4['ecrvv'] = 5
ret4['trvvb'] = 6
ret4['axcwe'] = 7
ret4['jvgbhibh'] = 8
ret4['dhhchbhv'] = 9
print(ret4)
ret4['dhhchbhv'] = 10
print(ret4)
for i in range(7):
ret4.popitem()
print(ret4)

字典推导式的使用

# 字典推导式:是基于现有可迭代对象创建新字典的简洁方法
# ◆ 格式:{key : value for (key, value) in iterable [if condition]}
#KV作为一个整体元素进行范围for的循环

numbers = [1, 2, 3, 4, 5]
nums = {i : i for i in numbers}#不要写成(i,i) in ---, 因为这里对于KV来说只有一个变量i, 由于返回值是字典,目的也是要生成一个字典,所有最外面有一个{}
nums2 = {i : i**2 for i in numbers}#i : i**n---为所有键值的K和V都乘n倍
print(nums)
print(nums2)

nums3 = {i : i for i in numbers if i % 2 == 0}#for前面的是每次循环里面的操作
print(nums3)
nums4 = {i : i for i in numbers if i % 2 != 0}
print(nums4)

以上全部代码编译结果展示

字典复习

4。集合(set)

集合的创建

#集合(set)
# ◆Set:是无序、可变序列,使用{ }界定,元素不可重复,用于存储一组唯一的值。
# ◆创建:使用大括号 {} 或 set() 函数创建


ret1 = {1, 2, 3, 4, 5, 6}
ret2 = set({1, 2, 3, 8, 9, 55, 78})
print(ret1)#打印时发现,在打印集合时是默认元素升序排列的
print(ret2)

集合的运算

# ◆集合运算(Set operations):(了解)
# ➢set1.union(set2): 返回两个集合set1和set2的并集,即两集合的全部元素。
# ➢set1.intersection(set2): 返回两个集合的交集,即两集合的公共元素。
# ➢set1.difference(set2): 返回两个集合的差集。即 set1- set2 的结果。

ret5 = ret3.union(ret4)
print(ret5)
ret6 = ret3.intersection(ret4)
print(ret6)
ret7 = ret3.difference(ret4)
print(ret7)
ret8 = ret4.difference(ret3)
print(ret8)
#ret8和ret7集合的元素不一样
#由于这些集合的计算函数比较难记,所以更推荐直接使用数学符号

print(ret3 & ret4)#&等价于intersection()
print(ret3 | ret4)#|等价于union()
print(ret3 - ret4)#-等价于difference()
print(ret4 - ret3)

集合的添加和删除元素

# ➢ 添加元素(Add elements):
# ✓ mySet.add(x): 向集合mySet中添加单个元素x
# ✓ mySet.update(set1): 将集合set1中的元素添加到集合mySet中。
# ➢ 移除元素(Remove elements):
# ✓ myDict.remove(x): 移除集合中的指定元素x,若x不存在会引发KeyError。
# ✓ myDict.discard(x): 移除集合中的指定元素x,若x不存在不会引发错误。

#添加元素(Add elements):
ret2.add(7)
print(ret2)
ret2.add(3)#插入已有的元素时,就相当于没有插入
print(ret2)
ret2.update(ret1)
print(ret2)#只会插入代插入集合中没有的元素

ret2.remove(1)
print(ret2)
#ret2.remove(100)#若x不存在会引发KeyError
print(ret2)
ret2.discard(78)
print(ret2)
#ret2.discard(100)#若x不存在不会引发错误
print("hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")
ret3 = {3, 4, 5, 6, 7}
ret4 = {6, 7, 8, 9, 10}

以上全部代码的编译结果

5。序列解包(Sequence unpacking)

#2.5 序列解包(Sequence unpacking)
# ◆ 概念:序列解包可同时将序列中的元素解包到多个变量中,使代码更简洁。
# ◆ 语法:variable1, variable2, ... = sequence
# ➢ 例,person = ("John", 25, "USA") # 定义一个元组
# ➢ name, age, nationality = person # 序列解包,将元素分配给对应的变量
# ◆ 注意:序列解包时,左侧变量数与右侧元素数需相等,否则引发 ValueError异常。
# ◆ 星号*操作符:用 * 可将序列中任意数量的元素分配给一个变量,适合处理长度可变的序列。
# ➢ 例如:first, *rest = [1, 2, 3, 4, 5]


numbers = [1, 2, 3, 4, 5, 6, 7]
first, *rest, last = numbers#也就是说在序列解包中当解包到的对象带了一个*,就说明这个带了*的解包对象是和待
print(first) #解包序列同样类型的变量,为长度可变的序列,长度取决于解包对象的个数,带*的解包对象只能有一个
print(rest) #前面没有带*的就只能解包出一个元素
print(last)
print()
numbers2 = [1, 2, 3, 4, 5, 6, 7]
first, *rest, last, wwfrf, eefwf, wwqeef, efqff = numbers2
print(first)
print(rest)
print(last)
print(wwfrf)
print(eefwf)
print(wwqeef)
print(efqff)
#以上解包出7个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值