0
点赞
收藏
分享

微信扫一扫

10Python基础-元组Tuple

小猪肥 2022-03-26 阅读 41

Python基础-元组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,)

访问元组

元组索引

和列表一样,元组可通过索引访问到内部元素。下标索引从 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 条评论