python100天之day9

元组、集合、字典

元组

  • 元组:用()定义的一种数据结构,元素之间用逗号分割。

  • 元组的性质:

    • 元组是一个有序序列
    • 元组的元素可以含有多种类型
    • 元组是不可以更改的
    • 允许有重复元素存在
    food=('Boiled Fish with Sichuan Pickles ','Big plate chicken','Dongpo Pork','The northest Braised goose with iron pan')
    food[1]='pizza'#TypeError: 'tuple' object does not support item assignment说明元组中的元素不能修改
    
  • 访问元组元素以及索引(我是个十足的美食爱好者(吃货),接下来就几道好吃的菜名创建元组啦!!!)

food=('Boiled Fish with Sichuan Pickles ','Big plate chicken','Dongpo Pork','The northest Braised goose with iron pan')
print(food)
print('大盘鸡:',food[1])#通过索引获取对应元素
print('铁锅炖大鹅:',food[-1])#负向索引,从-1开始
print(food[1:3])#正向索引取第二个到第三个元素
print(food[-4:-1])#负向索引取倒数第二个元素到倒数第四个元素
print(food[:])#去全部元素
print(food[::-1])#对元组逆序排列
  • 对列表元素进行遍历
food=('Boiled Fish with Sichuan Pickles ','Big plate chicken','Dongpo Pork','The northest Braised goose with iron pan')
#首先利用索引下标进行遍历
for i in range(len(food)):
    print(food[i],end=";")
#利用for循环遍历元组元素
print('\n')
for i in food:
    print(i,end=",")
print('\n')
# 通过enumerate函数处理元组之后再遍历可以同时获得元素索引和值
for index, elem in enumerate(food):
    print(index,elem,end=";")
我们迎来了一个严峻的问题,我们要更改元组中的元素该怎么办??
我们可以利用list()函数把元组转化为列表,然后通过列表修改、增删元素,最后利用tuple()函数将列表再转化为元组
food=('Boiled Fish with Sichuan Pickles ','Big plate chicken','Dongpo Pork','The northest Braised goose with iron pan')
print(food)#('Boiled Fish with Sichuan Pickles ', 'Big plate chicken', 'Dongpo Pork', 'The northest Braised goose with iron pan')
food=list(food)#把元组转化为列表
print(food)#['Boiled Fish with Sichuan Pickles ', 'Big plate chicken', 'Dongpo Pork', 'The northest Braised goose with iron pan']
food[0]='pizza'#对第一个元素进行替换
print(food)#['pizza', 'Big plate chicken', 'Dongpo Pork', 'The northest Braised goose with iron pan']
food=tuple(food)#将列表再转化为元组
print(food)#('pizza', 'Big plate chicken', 'Dongpo Pork', 'The northest Braised goose with iron pan')
元组中的元素是无法修改的,事实上我们在项目中尤其是多线程环境(后面会讲到)中可能更喜欢使用的是那些不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。一个不变对象可以方便的被共享访问)。所以结论就是:如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择。
补充一个概念计算机二级会考
进程与线程的区别:
  • 1、定义不一样,进程是执行中的一段程序,而一个进程中执行中的每个任务即为一个线程。
  • 2、一个线程只可以属于一个进程,但一个进程能包含多个线程。
  • 3、线程无地址空间,它包括在进程的地址空间里。
  • 4、线程的开销或代价比进程的小。

有趣的小例子

names = ("你妈妈","你爸爸","你哥哥")
ages = (18,19,20,21)
jobs = ("老师","程序员","人力资源师")

for i in range(3):
    print("姓名:{0},年龄:{1},工作:{2}".format(names[i],ages[i],jobs[i]))

集合

集合:用{}定义的一种数据结构,元素之间用,分隔。
# 创建集合的字面量语法
set1 = {1, 2, 3, 3, 3, 2}
print(set1)
print('Length =', len(set1))
set2 = set(range(1, 10))
print(set2)
集合的性质:
  • 集合是一种无序序列(我们可以通过无序可知集合是没有索引的)
  • 集合是可以更改的
  • 集合元素不允许重复出现
  • 集合同样允许多种数据类型的元素出现
  • 集合和我们数学中的集合一样可以进行进行交集、并集、差集等运算
运用于集合的函数
set1 = {1, 2, 3, 3, 3, 2}
print(set1)
print('Length =', len(set1))
set2 = set(range(1, 10))
print(set2)
set1.add(4)#添加元素
set1.add(5)
set2.update({11, 12})#添加与多个元素,所加序列可以是列表也可以是集合
set2.discard(5)
if 4 in set2:
    set2.remove(4)#remove删除指定元素
print(set1, set2)
集合运算
# 集合的交集、并集、差集、对称差运算
print(set1 & set2)
# print(set1.intersection(set2))
print(set1 | set2)
# print(set1.union(set2))
print(set1 - set2)
# print(set1.difference(set2))
print(set1 ^ set2)
# print(set1.symmetric_difference(set2))

集合推导式

set = {num for num in range(1, 100) if num % 3 == 0 or num % 5 == 0}
print(set)


set_a = {value for value in '有人与你立黄昏,有人问你粥可温'}
print(set_a)

zip用法

a = [1,2,3]
b = [4,5,6]
zipped = list(zip(a,b))     # 打包为元组的列表
print(zipped)

字典

字典:字典用放在花括号{} 中的一系列键—值对表示,键和值之间用冒号分隔,而键—值对之间用逗号分隔。
score={'冰墩墩':100,'雪容融':100}
print(score)
# 创建字典的构造器语法
items1 = dict(one=1, two=2, three=3, four=4)
print(items1)
# 通过zip函数将两个序列压成字典
items2 = dict(zip(['a', 'b', 'c'], '123'))
print(items2)
字典的性质
  • 字典是一个无序序列
  • 字典里的键允许重复,值也允许重复
  • 字典是可以修改的
访问字典(下面就我喜爱的菜进行打分创作字典)

在这里插入图片描述

foods={'酸菜鱼':85,'地锅鸡':85,'糖醋排骨':90,'馋嘴牛蛙':90,'清蒸梭子蟹':95}
print(foods['酸菜鱼'])#通过与列表相同的方式进行访问只不过这是把索引换成了键
foods['馋嘴牛蛙']=95#{'酸菜鱼': 85, '地锅鸡': 85, '糖醋排骨': 90, '馋嘴牛蛙': 95, '清蒸梭子蟹': 95}
foods['铁锅炖大鹅']=100#更新字典中的元素
print(foods)#{'酸菜鱼': 85, '地锅鸡': 85, '糖醋排骨': 90, '馋嘴牛蛙': 95, '清蒸梭子蟹': 95, '铁锅炖大鹅': 100}
del foods['酸菜鱼']#删除字典中的元素
print(foods)#{'地锅鸡': 85, '糖醋排骨': 90, '馋嘴牛蛙': 95, '清蒸梭子蟹': 95, '铁锅炖大鹅': 100}
if '酸菜鱼' in foods:
    print(foods['酸菜鱼'])
print(foods.get('酸菜鱼'))
# get方法也是通过键获取对应的值但是可以设置默认值
print(foods.get('一区烤冷面', 99))#经过此操作字典里依旧没有这个键值对
遍历字典
  • 按顺序遍历字典中的所有键
foods={'酸菜鱼': 85, '地锅鸡': 85, '糖醋排骨': 90, '馋嘴牛蛙': 95, '清蒸梭子蟹': 95, '铁锅炖大鹅': 100}
for food in sorted(foods.keys()):
    print(food,end=" ")
  • 遍历字典中的所有值
foods={'酸菜鱼': 85, '地锅鸡': 85, '糖醋排骨': 90, '馋嘴牛蛙': 95, '清蒸梭子蟹': 95, '铁锅炖大鹅': 100}
for food in foods.values():
    print(food,end=" ")
  • 遍历所有的键—值对
foods={'酸菜鱼': 85, '地锅鸡': 85, '糖醋排骨': 90, '馋嘴牛蛙': 95, '清蒸梭子蟹': 95, '铁锅炖大鹅': 100}
for food,score in foods.items():
    print(food,score,end=" ")

越努力越幸运!!!

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值