Python学习笔记(3-3):内置数据结构之元组
文章导读
- 课程难度:★☆☆☆☆
- 预计学习时间:30分钟
- 简介:本节主要讲解了Python内置数据结构中元组数据的相关基础知识及常用的方法,包括:(1)元组的定义方式;(2)基于下标和切片的方式访问元组的元素;
(3)元组的复制与拼接问题;(4)元组拆包的原理及使用过程;(5)元组和列表间的一些区别;
- 重点涉及的函数和内容:(1)理解元组拆包的原理;(2)元组是不可变的数据类型,定义后不可修改;
一、元组的定义
元组用圆括号 ()
定义, 或者不加括号也可以,只需逗号,
分隔。类似于列表,一个元组可以允许有多个数据类型的元素,我们通过如下的代码定义几次元组:
a = (1, 2, 3)
print(a)
a = 3, 4, 5
print(a)
a = 3, 'alpha', [1, 2]
print(a)
输出结果如下:
(1, 2, 3)
(3, 4, 5)
(3, 'alpha', [1, 2])
从元组定义可以不要括号来看,元组的至少要有两个元素,实际上没有元素的元组也可以被定义,它是空的元组数据的类型。但一个元素的元组,会被系统自动拆除元组的包装:
a = ()
print(a)
print(type(a))
a = (1)
print(a)
print(type(a))
输出结果如下:
()
<class 'tuple'>
1
<class 'int'>
二、元组的访问与切片
元组同样支持基于下标的访问,基于下标的访问还是用中括号(函数调用是圆括号):
a = 3, 'alpha', [1, 2]
print(a[1], a[2])
输出结果如下:
alpha [1, 2]
重要的是:元组是不可变的数据类型,不可以修改其部分的数据,无论是基于下标对单一元素的修改,还是基于切片的修改,例如:
a = (3, 'alpha', [1, 2])
a[1] = 'beta' # 会报错,元组在定义后不支持元素修改,请注意
三、元组的复制与拼接
元组也可以分别用 +
和 *
对数据进行拼接和复制 ,从侧面上看,因为 +
和 *
返回的是一个新的元组,没有改变原值,所以并没有与元组元素不可修改这一点冲突.
a = (1, 3, 5)
b = ('one', 'two', 'three')
c, d = a + b, a * 3
print(c, d)
输出结果如下:
(1, 3, 5, 'one', 'two', 'three') (1, 3, 5, 1, 3, 5, 1, 3, 5)
对于元组能用的内置函数很少,我们这里仅举一例,即count
,统计一个元组中元素出现的个数:
a = (1, 2, 2, 3, 4, 5, 5, 5, 6)
print(a.count(5))
输出结果如下:
3
四、元组的拆包
元组的拆包,实质上是一个赋值表达式,将=
(赋值操作符)右边元组的元素拆开,赋值给=
左边的多个变量。要求:=
左边的变量个数必须与元组中元素的长度一致,如若不等,则会报错
这个就是拆包的过程,这个与同时定义多个元素的过程几乎一样,例如如下代码:
a1, a2, a3, a4 = (1, 4, 6, 8)
b1, b2, b3, b4 = 1, 4, 6, 8
print(a1, a2, a3, a4)
print(b1, b2, b3, b4)
输出结果如下:
1 4 6 8
1 4 6 8
以下是一个交换元素值的例子:
a = 2
b = 3
a, b = b, a
引入元组的概念之后,这个定义就显得很清楚了。我们创建了一个元组(b, a),然后将a, b的赋值作为元组(b, a)拆包的结果。
另外,多返回值的函数,实际上也可以看做返回了一个元组,而我们传入多个值接收这些结果,实际上就是元组的拆包过程。具体示例如下:
def fun(a, b):
return a * b, a + b, a - b
a = fun(3, 5)
print(a)
Product, Sum, Difference = a
print(Product, Sum, Difference)
输出结果如下:
(15, 8, -2)
15 8 -2
实际上,在应用当中多层元组的嵌套拆包使用较多,示例如下:
tup = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
for a, b, c in tup:
print(‘a={}, b={}, c={}’.format(a, b, c))
输出结果如下:
a=1, b=2, c=3
a=4, b=5, c=6
a=7, b=8, c=9
五、元组和列表的区别
最后,元组和列表之间有很多相似的地方,它们都属于有序序列,支持双向索引和切片操作,支持运算符+
、*
等,但二者也存在根本性的差异:元组是不可变的,而列表是可变的,具体表现在:
1、 元组是不可变的,不能对元组中的元素直接进行增删改的操作,因此元组不能使用append()
、extend()
、insert()
、remove()
和pop()
等方法。
2、元组可用作字典的键,也可以作集合的元素,但列表不可以,包含列表的元组也不可以。
以上就是元组的主要讲解内容,结合上述的实验,我们可以仔细地思考元组它本身的意义,它可能看上去在完成数据分析任务中用的很少,但实际上在很多地方存在。
对于缺乏Python基础的同仁,可以通过免费专栏🔥《Python学习笔记(基础)》从零开始学习Python
结语
请始终相信“Done is better than perfect”
,不要过分追求完美,即刻行动就是最好的开始, 一个模块一个模块地积累和练习,必将有所收获。
还有其他的问题欢迎在评论区留言📝!
[版权申明] 非商业目的注明出处可自由转载,转载请标明出处!!!
博客:butterfly_701c