Python:数据类型tuple的概述和基本操作

学习来源:
北京图灵学院:
https://study.163.com/course/courseMain.htm?courseId=1005010013#/courseDetail?tab=1
廖雪峰python教程:
https://www.liaoxuefeng.com

tuple

  • 在python中,另一种有序列表叫做元组:tuple。tuple和list非常类似,但是tuple中的元素一旦初始化就不能修改。
  • 列表与元组都是容器,是一系列的对象。列表和元组的“技术差异”是,列表是可变的,而元组是不可变的。这是在 python 语言中二者唯一的差别。
  • 列表中的append()、insert()函数可以用来向list添加更多的元素,而元组却没有这些函数,因为元组不能修改。
  • 获取tuple中元素的方法是和list一样的,可以同样的使用“索引号”,但不能赋值成另外的元素。

元素不可变的tuple有什么意义呢?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

tuple的索引操作
# tuple的索引操作和list一样
t=(1,2,3,4,5)
print(t[4])
print(t[5])# 索引值超过列表范围就会报错

5
IndexError: tuple index out of range
元组的切片
# 对元组切片时,定义的切片范围可以超出列表范围
t1=(1,2,3,4,5)
t2=t1[1:10]
print(t2)

(2, 3, 4, 5)

元组相加,属于寻址,将旧元组给了新的赋值,成了新元组。

t1=(1,2,3)
t2=(5,6,7)
print(id(t1))
t1=t1+t2 #  原t1元组内容没变化,给这个t1重新赋值了
print(id(t1))
print(t1)

3128413668552
3128412918024
(1, 2, 3, 5, 6, 7)

tuple的陷阱: 当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

t = (1, 2)
print(t)

(1, 2)

如果要定义一个空的tuple,可以写成():

t = ()
print(t)

()

但是,如果要定义一个只有1个元素的tuple,如果你这么定义:
t = (1)
1.这定义的不是tuple,而是1这个数字!
3.所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
t = (1,)

t = (1)
print(t)
t = (1,)
print(t)
# Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

1
(1,)

最后来看一个“可变的”tuple:

t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)

('a', 'b', ['X', 'Y'])
  • 表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素
  • tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变
  • 即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的
  • 理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

小测验:

#  练习:用索引取出下面list的指定元素:
L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Lisa']
]
# 打印Apple:
print(L[0][0])
# 打印Python:
print(L[1][1])
# 打印Lisa:
print(L[2][2])

Apple
Python
Lisa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值