Python学习笔记:09 容器型数据类型------元组

09 容器型数据类型------元组

认识元组

  1. 元组(tuple)
  • 元组是容器型数据类型,将()作为容器的标志,里面多个元素用逗号隔开:(元素1,元素2,元素3,…)
  • 元组不可变(不支持增删改操作)
  • 元组有序(支持下标操作)

注意:可以把元组看成不可变的列表。列表中除了元素的增删改外,其他的操作元组几乎都适用

  1. 只有一个元素的元组

()表示空的元组,但是因为()本身的特殊性导致如果一个元组只有一个元素,必须在这个唯一的元素后面添加逗号:(元素, )

定义和使用元组

定义元组通常使用()字面量语法,元组类型支持的运算符跟列表是一样的。

"""
example01 - 元组
元组是不可变的
Author: yucui
Date: 2021/7/27
"""
fruit = ('apple',)       # 一元组必须在这个元素之后添加','
fruits = ('apple', 'bananas', 'grape', 'watermelon')    # 四元组

# 重复运算
print(fruits * 2)
print(fruits)

# 成员运算
print('apple' in fruits)         # True
print('grape' not in fruits)     # False

# 合并运算
fruits2 = ('litchi', 'strawberry')
fruits3 = fruits + fruits2
print(fruits3)
fruits += ('pear',)
print(fruits)

# 索引和切片
print(fruits3[3])
print(fruits3[-1])
print(fruits3[1:4])
print(fruits[::-1])
print(fruits3[1:4:2])

# 获取元素的下标
print(fruits3.index('watermelon'))     # 3
# 获取元素重复次数
print(fruits3.count('apple'))          # 1

元组的应用场景

例1:打包和解包操作

当我们把多个用逗号分隔的值赋给一个变量时,多个值会打包成一个元组类型;当我们把一个元组赋值给多个变量时,元组会解包成多个值然后分别赋给对应的变量,如下面的代码所示。

# 打包
a = 1, 10, 100
print(type(a), a)    # <class 'tuple'> (1, 10, 100)
# 解包
i, j, k = a
print(i, j, k)       # 1 10 100

在解包时,如果解包出来的元素个数和变量个数不对应,会引发ValueError异常,错误信息为:too many values to unpack(解包的值太多)或not enough values to unpack(解包的值不足)。

a = 1, 10, 100, 1000
# i, j, k = a             # ValueError: too many values to unpack (expected 3)
# i, j, k, l, m, n = a    # ValueError: not enough values to unpack (expected 6, got 4)

有一种解决变量个数少于元素的个数方法,就是使用星号表达式,我们之前讲函数的可变参数时使用过星号表达式。有了星号表达式,我们就可以让一个变量接收多个值,代码如下所示。需要注意的是,用星号表达式修饰的变量会变成一个列表,列表中有0个或多个元素。还有在解包语法中,星号表达式只能出现一次。

"""
example02 - 元组的应用
Author: yucui
Date: 2021/7/27
"""

a, b, *c = 5, 10, 15, 20, 25
print(a)       # 5
print(b)       # 10
print(c)       # [15, 20, 25]

a, *b, c = 5, 10, 15, 20, 25
print(a)       # 5
print(b)       # [10, 15, 20]
print(c)       #25

*a, b, c = 5, 10, 15, 20, 25
print(a)       # [5, 10, 15]
print(b)       # 20
print(c)       # 25


# ROT_TWO
a, b = b, a
print(a)
print(b)
# ROT_THREE
a, b, c = b, c, a

需要说明一点,解包语法对所有的序列都成立,这就意味着对字符串、列表以及我们之前讲到的range函数返回的范围序列都可以使用解包语法。

例2:交换两个变量的值

交换两个变量的值是编程语言中的一个经典案例,在很多编程语言中,交换两个变量的值都需要借助一个中间变量才能做到,如果不用中间变量就需要使用比较晦涩的位运算来实现。在Python中,交换两个变量ab的值只需要使用如下所示的代码。

# ROT_TWO
a, b = b, a

同理,交换三个变量的值用以下代码:

# ROT_THREE
a, b, c = b, c, a

需要说明的是,上面并没有用到打包和解包语法,Python的字节码指令中有ROT_TWOROT_THREE这样的指令可以实现这个操作,效率是非常高的。但是如果有多于三个变量的值要依次互换,这个时候没有直接可用的字节码指令,执行的原理就是我们上面讲解的打包和解包操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

better meˇ:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值