1 元组的介绍
- 一般当数据不改变时,用元组,其余情况用列表。
1.1 元组的创建
- 用()
- 对比——列表的创建:[]
输入:
tup=()
print(tup,type(tup))
得到:
() <class 'tuple'>
添加元素如下:
tup=(1,2,3,4,5)
print(tup,type(tup))
得到:
(1, 2, 3, 4, 5) <class 'tuple'>
- 元组也可以通过索引值来进行取值
tup=(1,2,3,4,5)
print(tup[3])
得到:
4
- 元组不能通过索引值来赋值
tup=(1,2,3,4,5)
tup[3]=44
print(tup)
报错:
TypeError: 'tuple' object does not support item assignment
元组是不可变序列,或称不可变对象
tup=10
print(tup,type(tup))
得到:
10 <class 'int'>
此时元组中的数为整型,我们稍加改变:
tup=10,
print(tup,type(tup))
得到:
(10,) <class 'tuple'>
此时就变成了一个元祖。又例如:
tup=1,2,3,4,5
print(tup,type(tup))
输出:
(1, 2, 3, 4, 5) <class 'tuple'>
不加括号,它也是一个元组。因此我们总结如下:
如果元组不是空的,那么它里面至少得有一个逗号
,
1.2 元组的解包
tup=10,20,30,40
a,b,c,d=tup
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
得到:
a= 10
b= 20
c= 30
d= 40
感觉似曾相识?回顾这个例子:
a=6
b=8
b,a=a,b
print(a,b)
得到:
8 6
如果我们用两个值解剖四个元素,会出现什么情况呢?
tup=10,20,30,40
a,b=tup
print('a=',a)
print('b=',b)
报错:
ValueError: too many values to unpack (expected 2)
理论上,变量必须和元素一一对应,若不满足,需要加
*
(详见下面的内容)。
该如何调整呢?理论上我们应该再添加两个,但是如果这里缺的值有10000个,我们总不能添加10000个变量吧,因此,我们使用:
tup=10,20,30,40
a,b,*c=tup
print('a=',a)
print('b=',b)
此时:
a= 10
b= 20
我们可以看看此时c是什么效果:
tup=10,20,30,40
a,b,*c=tup
print('a=',a)
print('b=',b)
print('c=',c)
得到:
a= 10
b= 20
c= [30, 40]
说明:剩下的元素以列表的形式全部储存在
c
中,不用考虑变量有多少个。
那么,另一个问题来了,如果想存储中间的元素呢?
tup=10,20,30,40
a,*b,c=tup
print('a=',a)
print('b=',b)
print('c=',c)
得到:
a= 10
b= [20, 30]
c= 40
把第一个给了a
,最后一个给了c
,剩下的中间部分全部给了b
。
同理:
tup=10,20,30,40
*a,b,c=tup
print('a=',a)
print('b=',b)
print('c=',c)
结果可想而知:
a= [10, 20]
b= 30
c= 40
这个功能在列表里是否适用呢?
a,b,*c=[1,2,3,4,5,6,7