容器型数据类型 -- 元组(tuple)

元组(tuple)

元组和列表很像,同样我们可以用它来放一些数据,但是不同的是,将数据放进元组这样的容器中后,就不能再对里面的元素作修改了,所谓的修改也就是增、删、改了,那么,相信你也产生了这样的疑惑:这样“不方便的数据类型”有什么用呢?这是每一个初学者都会产生的问题。

是的,元组确实是很少被使用,但是这并不代表它没有用,如果仅是单单认为它就是一个不可变的列表的话,可能就忽略了它真正存在的意义,这样要是在面试被问到的话,你很可能会一脸懵逼。实际上,元组之所以存在,也是因为它的不可变性这个特点,想像一下,如果你创建了一条记录,将它给其他人浏览,那你肯定不希望被人修改它原始的样子吧,特别是名字、性别、籍贯等这样重要的信息,要是将它放到列表,那么这样的数据是不具有保护性的,也就是因为这样,为了满足这样的需求,因此,产生了列表这样的容器型数据类型,通常将它来作为记录工具来使用,而第二个身份才是一个不可变的列表,也是因为它本身并不支持更改,因此,能对它所做的操作也是很少。

下面来看看它的定义方法以及操作

1.元组的定义

  • 字面量语法

元组采用()将元素包起来,括号里面可以放的元素数据类型和列表一样,基本上所有类型的数据都可以放,例如下面这样

定义一个空元组

a = ()

定义一个一元组(这里有一个坑)

如果你这样定义一个只有一个元素,我们将就看一下它的数据类型

b = (3)
print(type(b))  # 它的返回结果是<class 'int'>

为什么是这样呢?大家还记得()还可以做什么吗?它是不是在运算时提升括号里面的数据的元素优先级,那么在这里,如果你这样定义,那它就相当于你是给里面的 3 提升了优先级,并不知道你想定义一个元组,那么该怎样做呢?

b = (3,)
print(type(b))       # 它的返回结果是<class 'tuple'>

所以,定义一个只有一个元素的元组就一定要在写了元素后加一个逗号(英文输入法下)

定义一个二元组

c = (1,2)

定义一个三元组

d = ('hello',2,3)

采用构造器语法也能创建一个元组,但是并不推荐,坑太多,所以这里就不举例了。定义好一个元组后,我们来看看能对它做哪些操作。

2.元组的使用

查看变量的类型type()、 查看元组中元素的数量len()、循环遍历元组中的元素、成员运算(元素在不在某个元组里)、切片、等和列表的操作大同小异,我就不一一举例,还不明白的请看我之前写的《5分钟带你了解Python中的容器型数据类型–列表2》,这里我们主要看一下它和列表的不同之处。

  • 索引时

在相对列表进行某个元素的更改时,往往我们先将这个元素通过索引拿到,然后再进行赋值操作,这样就可以将这个元素更改成新赋的值,但是,在元组里面进行这样的操作我们可以看一下。
在这里插入图片描述
当你这样操作时它就已经标出了颜色(pycham环境),如果你硬是要运行,会得到下面这样一个报错:

TypeError: ‘tuple’ object does not support item assignment(类型错误:元组对象不支持赋值操作)

如果你是纯取出来,那样是可以的。总的来说,只要你不尝试更改它,其他操作基本和列表都是一样的

主要就是讲这一点注意事项。其他操作我就不再赘述,大家借用列表的知识去尝试练习,会事半功倍哦

3.元组的应用场景

  • 例1

打包和解包

当我们给一个变量赋多个值时,这时候系统会将这些值打包成一个元组,例如

a = 2, 0, 2, 1
print(type(a), a)      # 输出<class 'tuple'> (2, 0, 2, 1)

什么又是解包呢?大家在python中想对两个变量进行值得交换时并不需要像在其它语言上那样定义一个临时变量作为交换的临时存储工具,如果想对a,b两个变量的值进行交换,只需要这样做

a = 1
b = 2
a, b = b, a
print(a,b)       # 输出 2 1

其实这样的操作就是一个解包的过程,

解包就是在给多个变量同时赋值的时候,这时候右边就是一个元组,将元组里的值赋给对应的变量的过程,这里的a, b = b, a的右边就是一个二元组,再将对应的b的值赋给a,将a的值赋给了b,就实现了变量值的交换。但是对于解包时变量个数和元组的元素个数不等的情况,会引发valueError异常。例如:

a = 2, 0, 2, 1
i, k, h , l ,o = a     #ValueError: not enough values to unpack (expected 5, got 4)(元组中的元素太少)
y, z, w = a            #ValueError: too many values to unpack (expected 3)(元组中的元素太多)

现在我们来思考一下函数中的可变参数(还不知道函数的请先跳过),参数之所以可变就是将多个参数打包成了一个元组,在传入参数时这时候实际上给函数传入的是一个元组,在对这个元组进行遍历就可以得到多个参数,例如:

def add(*args):
    print(type(args), args)
add(1,2,5)                # <class 'tuple'> (1, 2, 5)
add(2,7,8,9)              # <class 'tuple'> (2, 7, 8, 9)

下一篇,会讲到另一个容器型数据类型—集合
如果对你有帮助,不要忘记点赞、关注、评论收藏哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Python和数据分析

钟意作者

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

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

打赏作者

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

抵扣说明:

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

余额充值