python中的元组

目录

初始元组

元组的定义

元组的特点

元组的常见操作

直接访问元素

查找元素索引

统计元素次数

元组的切片

元组的遍历


初始元组

元组的定义

元组(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}")

对代码进行运行测试:

### Python元组的基本操作 #### 定义与创建元组 元组是一种有序且不可变的数据集合,能够存储多种类型的元素。要创建一个元组,可以直接使用圆括号包裹各个元素,并通过逗号分隔开。对于只含有单个元素的元组,在该元素之后也需加上逗号来区分其与其他表达式的差异[^1]。 ```python tu = (1, 2, 3, 'a', 'b', 'c') empty_tuple = () single_element_tuple = ("only", ) print(single_element_tuple) # 输出: ('only',) ``` #### 访问元组中的元素 由于元组支持索引访问方式,因此可以通过指定位置获取特定项的内容;同时也可以利用切片语法取得连续片段内的成员。需要注意的是,负数索引可以从序列末端向前计数[^3]。 ```python example_tuple = ('apple', 'banana', 'cherry') # 获取第一个元素 first_item = example_tuple[0] # 使用负索引获得最后一个元素 last_item = example_tuple[-1] # 切片得到中间两个元素组成的子元组 middle_items = example_tuple[1:3] ``` #### 遍历元组 遍历意味着按照顺序逐一遍览容器里的每一个条目。这通常借助`for`循环实现,从而简化迭代过程并提高代码可读性。 ```python colors = ('red', 'green', 'blue') for color in colors: print(color) ``` #### 修改元组内容的方法 尽管直接更改已存在的元组是不可能的事情,但是可以通过一些间接手段达到目的。比如先将目标元组合成列表形式做适当调整后再转回原状,或者是构建全新的包含所需变动后的版本作为替代品。 ```python original_tuple = ('one', 'two', 'three') # 转换成列表修改再转换回来 temp_list = list(original_tuple) temp_list.append('four') modified_tuple = tuple(temp_list) # 或者创建一个新的带有额外项目的元组 new_tuple_with_addition = original_tuple + ('four',) ``` #### 查找元组内某值的位置 如果想要知道某个特定数值在整个系列里处于何位,则可以调用内置函数`.index()`来进行定位查询。此方法会返回首次出现该项时对应的序号,若不存在则抛出异常。 ```python numbers = (78, 92, 45, 67, 89, 78) position_of_92 = numbers.index(92) # 返回第一次找到92的位置 try: position_of_nonexistent_value = numbers.index(-1) except ValueError as e: print(e) # 当找不到给定值时触发错误处理逻辑 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值