目录
初始元组
元组的定义
元组(Tuple)是一种内置的数据结构,用于存储多个有序的元素,与列表(List)类似,但元组是不可变的,也就是说创建后就不能修改(不能增删改其中的元素)。
语法结构:
元组变量名 = (元素1,元素2,元素3,元素4,......)
tuple = (1, 2, 3) #这是一个元组
元组的特点
- 有序:元组内元素的位置固定
- 不可变:元组创建后内部的元素不可更改
- 元素不单一:元组内的元素可以是重复的
- 可嵌套:元组内的元素可以是元组、列表、字典等其他结构
元组的常见操作
你,小村庄中的药剂师,肩负着守护村民健康与希望的责任。你的木屋中飘荡着草药与魔力混合的淡香,墙上挂满了各式各样的干草和瓶瓶罐罐。案几上摊开着泛黄的羊皮纸,那是你多年来收集和改良的炼药水配方,有的来自祖辈传承,有的源于你与远方旅者交换所得,还有的,是你在漫长试验中亲手创出的独门秘方。
直接访问元素
语法结构:
元组变量名[元素下标]
例如,大红瓶的药水配方:
('火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','金丝草粉末','血藤果浆','血藤果浆','血藤果浆','月光露','红玛瑙魔晶粉末')
你想知道大红瓶在制作过程中需要加入的第6道药材是什么。
red_bottle = ('火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','金丝草粉末','血藤果浆','血藤果浆','血藤果浆','月光露','红玛瑙魔晶粉末') check_number = 6 check_index = check_number - 1 #第n个元素的下标为n-1 check_name = red_bottle[check_index] print(f"第{check_number}道药材是{check_name}")
对代码进行运行测试:
查找元素索引
index()函数只返回指定元素在元组中第一次出现的位置,若没找到则报错ValueError。
例如,大蓝瓶的药水配方:
('星辰草叶','星辰草叶','星辰草叶','星辰草叶','冰心水晶末','蓝露果精粹','蓝露果精粹','深渊之水','空灵花蜜','空灵花蜜','空灵花蜜')
你想知道大蓝瓶在制作过程中深渊之水在第几步开始加入。
blue_bottle = ('星辰草叶','星辰草叶','星辰草叶','星辰草叶','冰心水晶末','蓝露果精粹','蓝露果精粹','深渊之水','空灵花蜜','空灵花蜜','空灵花蜜') check_name = '深渊之水' check_index = blue_bottle.index(check_name) check_number = check_index + 1 #第n个元素的下标位置为n-1,相反,下标为n的元素位置在第n+1个 print(f'药材{check_name}在第{check_number}步加入')
对代码进行运行测试:
统计元素次数
count()函数能够统计指定元素在元组中出现的次数。
例如,大红瓶的药水配方:
('火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','金丝草粉末','血藤果浆','血藤果浆','血藤果浆','月光露','红玛瑙魔晶粉末')
你想知道制作大红瓶需要多少份火焰花花瓣。
red_bottle = ('火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','金丝草粉末','血藤果浆','血藤果浆','血藤果浆','月光露','红玛瑙魔晶粉末') check_name = '火焰花花瓣' check_count = red_bottle.count(check_name) print(f"制作大红瓶需要{check_count}份{check_name}")
对代码进行运行测试:
元组的切片
元组(tuple)虽然是不可变的,但可以进行切片操作,和列表或字符串的切片方式完全一致。切片的结果是一个新的元组,不会改变原元组内容。
例如,大蓝瓶的药水配方:
('星辰草叶','星辰草叶','星辰草叶','星辰草叶','冰心水晶末','蓝露果精粹','蓝露果精粹','深渊之水','空灵花蜜','空灵花蜜','空灵花蜜')
你手中的配方不小心被打湿,部分配方看不清楚:
('星辰草叶','星辰草叶','星辰草叶','星辰草叶','*','*','*','*','/','空灵花蜜','空灵花蜜')
你call给远方的药剂师朋友打算将被打湿的部分重新填上内容。
思路:
1.元组的元素是不可更改的,需要将其转换为列表才能进行更改,更改完后再次将其转换为元组
2.查清自己的配方内从哪个到哪个的药材看不清,获取相应下标后对朋友的配方进行切片操作来填补自己的配方
friend_paper = ('星辰草叶','星辰草叶','星辰草叶','星辰草叶','冰心水晶末','蓝露果精粹','蓝露果精粹','深渊之水','空灵花蜜','空灵花蜜','空灵花蜜') my_paper = ('星辰草叶','星辰草叶','星辰草叶','星辰草叶','*','*','*','*','*','空灵花蜜','空灵花蜜') list_my_paper = list(my_paper) #将元组转换为列表 first_lose_index = list_my_paper.index('*') #查找第一个丢失的元素的下标 list_my_paper.reverse() #颠倒列表用于查找最后一个元素出现的对称位置 last_lose_index = (len(list_my_paper) - 1) - list_my_paper.index('*') #查找最后一个丢失的元素的下标 list_my_paper.reverse() find_friend_paper = friend_paper[first_lose_index:last_lose_index + 1] #切片是半闭半开的区间 print(f"从朋友的配方中获取的缺失的配方:{find_friend_paper}") list_my_paper[first_lose_index:last_lose_index + 1] = find_friend_paper #填补缺失的部分 tuple_my_paper = tuple(list_my_paper) #将元组转换为列表 print(f"修复后的手中的配方:{tuple_my_paper}")
对代码进行运行测试:
元组的遍历
在 Python 中,元组是可迭代的,所以可以使用for循环来遍历其中的每一个元素。
例如,大红瓶的药水配方:
('火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','金丝草粉末','血藤果浆','血藤果浆','血藤果浆','月光露','红玛瑙魔晶粉末')
你需要去药材铺购买炼制大红瓶的材料,但你手中的金丝草粉末和月光露仍有富余,不需要购买,在药材铺老板帮你拣药材时,你该怎么对他说。
red_bottle = ('火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','火焰花花瓣','金丝草粉末','血藤果浆','血藤果浆','血藤果浆','月光露','红玛瑙魔晶粉末') for item in red_bottle: if item == '金丝草粉末' or item == '月光露': print(f"我不需要{item}!") else: print(f"请帮我拿一份{item}")
对代码进行运行测试: