10Python基础-元组Tuple

什么是元组

元组是Python的内置数据结构之一,是一个不可变序列,可以认为元组是一种特殊的列表,其中的元素不可以被改变。

  1. 先简单说下可变序列 与 不可变序列的区别
  • 不可变序列
    例如:字符串,元组
    特点:没有增、删、改的操作
  • 可变序列
    例如:列表,字段,集合
    特点:可以对序列执行增、删、改操作,但对象内存地址不发生改变
  1. 什么叫不可变 及 验证不可变
    所谓元组的不可变指的是元组所指向的内存中的内容不可变。从以下实例可以看出,重新赋值的元组 tup,绑定到新的对象了,不是修改了原来的对象。
tup = ('r', 'u', 'n', 'o', 'o', 'b')
tup[0] = 'g'     # 不支持修改元素
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
id(tup)     # 查看内存地址
4440687904
tup = (1,2,3)
id(tup)
4441088800    # 内存地址不一样了
  1. 为啥要有不可变序列?
    当一个数据在被多方操作时,可能会导致数据不准确。例如多个人在操作同一张银行账户取钱,如果大家都在同意时刻取钱,那么在取的那刻钱是一样多的,多人取出的钱可能超出账户余额,造成数据异常。可变序列面对这种问题的时候,需要有加锁机制,每次数据在某一时刻只能被一个人操作(即加锁),当这个人操作完成解锁后,其他人再操作。而不可变序列,直接是不让改变,对元素有只读操作。省去类似锁机制的过程。

元组的创建

元组使用小括号 ( ),列表使用方括号 [ ]。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。需要注意的是,创建空元素元组和创建单个元素元组的特殊情况。

  • 创建元组
#1.使用()
my_tuple0 = (1,2,"3")
print(my_tuple0) #(1,2,"3")

#2.使用内置函数tuple()
my_tuple1 = tuple((1,2,"3"))
print(my_tuple1) #(1,2,"3")

#3.小括号可以省略
my_tuple2 = 1,2,"3"
print(my_tuple2) #(1,2,"3")

针对上述的小括号省略来创建单个元素的元组时,会出现歧义。
例如,创建一个只有一个整数1的元组,如果省略小括号则是 my_tuple3 = 1。此时my_tuple3 是一个整型变量

  • 创建单个元素元组

#1.小括号不可以省略,且需要在元素后添加,
my_tuple2 = (1,)
print(my_tuple2) #(1,)
#如果没有逗号, 会认为是在为一个整型复制,()是运算符,提高优先级

#2.使用内置函数tuple()
my_tuple1 = tuple((1))
print(my_tuple1) #(1,)

元组推导式

  • 语法
结果元组对象名 = ( 表达式1 for i in 原元组对象 if 表达式2)
  • 举例
    访问生成器对象从下面的结果中可以看出,使用元组推导式生成的结果不是一个元组或者列表,而是一个生成器对象,这一点和列表生成器是不同的。可以通过for去遍历 或者使用tuple()将其转为一个元组。
src_tuple = (1,2,3,4)
#1.利用元组推导式,将src_tuple内的元素乘以2后生成新元组res_tuple
res_tuple = (i * 2 for i in src_tuple) 
print(res_tuple) #<generator object <genexpr> at 0x00000000028668E0>

#利用for遍历
for i in res_tuple:
	print(i,end='\t') #2	4	6	8

#使用tuple()转为元组
print(tuple(res_tuple)) #(2,4,6,8)

#2.利用元组推导式,将src_tuple内大于2的元素乘以2后生成新元组res_tuple1
res_tuple1 = (i * 2 for i in src_tuple if i > 2)
print(tuple(res_tuple2)) #(6,8)

访问元组

元组索引

和列表一样,元组可通过索引访问到内部元素。下标索引从 0 开始,可以进行截取,组合等
在这里插入图片描述

单个元素

利用索引取出对应索引位置的元素

tup1 = ('Google', 'CSDN', 1997, 2000)
 
print("tup1[0]: ", tup1[0]) #Google

多个元素

和列表的切片相同,生成一个新的元组

tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup2[1:5]: ", tup2[1:5]) # (2, 3, 4, 5)

tup = ('Google', 'CSDN', 'Taobao', 'Wiki', 'Weibo','Weixin')
python表达式结果描述
tup[1]‘CSDN’读取元组第二个元素
tup[-2]‘Weibo’反向读取,读取倒数第二个元素
tup[1:](‘CSDN’, ‘Taobao’, ‘Wiki’, ‘Weibo’, ‘Weixin’)截取元素,从第二个开始后的所有元素
tup[1:4](‘CSDN’, ‘Taobao’, ‘Wiki’)截取元素,从第二个开始到第四个元素(索引为 3)

遍历元组

tup3 = (1, 2, 3, 4, 5, 6, 7)
for i in tup3:
    print(i)

for i in range(len(tup3)):
	print(tup3[i])

修改元组

上面说的元组是不可变的序列,这里说的修改指的是扩展元组,在改变后又创建了新的元组。

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
 
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
 
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)

删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,例如:

tup = ('Google', 'CSDN', 1997, 2000)
 
print (tup)
del tup
print ("删除后的元组 tup : ")
print (tup)

#删除后的元组 tup : 
#Traceback (most recent call last):
#  File "test.py", line 8, in <module>
#    print (tup)
#NameError: name 'tup' is not defined

元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

python表达式结果描述
(1, 2, 3) + (4, 5, 6)(1,2,3,4,5,6)元组连接
(‘Hi!’,) * 4(‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’)元组复制
3 in (1, 2, 3)True元素是否存在于元组

元组内置函数

有元组 a = (0,1,2,3)
有列表 b = [4,5,6,7]

方法及描述实例
len(a): 计算元组元素个数print(len(a)) #4
max(a): 返回元组中元素最大值print(max(a)) #3
min(a): 返回元组中元素最小值print(min(a)) #0
tuple(iterable): 将可迭代系列转换为元组print(tuple(b)) #(4,5,6,7)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@nanami

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值