【Python】第013课:常用数据结构之元组

 

Python中容器型的数据类型肯定不止列表一种,接下来我们为大家讲解另一种重要的容器型数据类型,它的名字叫元组(tuple)。

定义和使用元组

在Python中,元组也是多个元素按照一定的顺序构成的序列。元组和列表的不同之处在于,元组是不可变类型,这就意味着元组类型的变量一旦定义,其中的元素不能再添加或删除,而且元素的值也不能进行修改。定义元组通常使用()字面量语法,也建议大家使用这种方式来创建元组。元组类型支持的运算符跟列表是一样。下面的代码演示了元组的定义和运算。

# 定义一个三元组
t1 = (10,20,30,)
# 定义一个四元组
t2 = ('spring','风花雪月','辙思玄度',9527)

# 查看变量的类型
print(type(t1), type(t2))
# 查看元组中元素的数量
print(len(t1), len(t2))

# 通过索引运算获取元组中的元素
print(t1[0], t1[-3],t1[2])
print(t2[3], t2[-1])

# 循环遍历元组中的元素
for member in t2:
    print(member)

# 成员运算
print(100 in t1)
print(9527 in t2)

# 拼接
t3 = t1 + t2
print(t3)

# 切片
print(t3[:2:])

# 比较运算
print(t1 == t3)
print(t1 >= t3)
print(t1 < (30, 11, 55))


D:\装机软件\python\python.exe "D:/python code2020/untitled1/y元组.py"
<class 'tuple'> <class 'tuple'>
3 4
10 10 30
9527 9527
spring
风花雪月
辙思玄度
9527
False
True
(10, 20, 30, 'spring', '风花雪月', '辙思玄度', 9527)
(10, 20)
False
False
True

Process finished with exit code 0

一个元组中如果有两个元素,我们就称之为二元组;一个元组中如果五个元素,我们就称之为五元组。需要提醒大家注意的是,()表示空元组,但是如果元组中只有一个元素,需要加上一个逗号,否则()就不是代表元组的字面量语法,而是改变运算优先级的圆括号,所以('hello', )(100, )才是一元组,而('hello')(100)只是字符串和整数。我们可以通过下面的代码来加以验证。

# 空元组
a = ()
print(type(a))    
# 不是元组
b = ('hello')
print(type(b))    
c = (100)
print(type(c))   
# 一元组
d = ('hello', )
print(type(d))    

<class 'tuple'>
<class 'str'>
<class 'int'>
<class 'tuple'>
<class 'tuple'>

Process finished with exit code 0

元组的应用场景

 

例子1:打包和解包操作。

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

# 打包
a = 1, 10, 100
print(type(a), a)    #
# 解包
i, j, k = a
print(i, j, k)

<class 'tuple'> (1, 10, 100)
1 10 100

Process finished with exit code 0

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

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

a = 1, 10, 100, 1000
i, j, *k = a
print(i, j, k)
i, *j, k = a
print(i, j, k)
*i, j, k = a
print(i, j, k)          
*i, j = a
print(i, j)
print(i, j)
i, j, k, *l = a
print(i, j, k, l)
i, j, k, l, *m = a
print(i, j, k, l, m)

1 10 [100, 1000]
1 [10, 100] 1000
[1, 10] 100 1000
[1, 10, 100] 1000
[1, 10, 100] 1000
1 10 100 [1000]
1 10 100 1000 []

Process finished with exit code 0

 

课程链接:https://github.com/jackfrued/Python-Core-50-Courses/blob/maste

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值