天天看点

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=(,,,,)
print(t[])
print(t[])# 索引值超过列表范围就会报错


IndexError: tuple index out of range
           

元组的切片

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

(2, 3, 4, 5)
           

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

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



(, , , , , )
           

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

t = (, )
print(t)

(, )
           

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

t = ()
print(t)

()
           

但是,如果要定义一个只有1个元素的tuple,如果你这么定义:

t = (1)

1.这定义的不是tuple,而是1这个数字!

3.所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

t = (1,)

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


(,)
           

最后来看一个“可变的”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