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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值