元组(Tulpe)是Python中另外的一种数据类型,和列表(List)一样也是一组有序对象的集合,大部分的属性和列表(List)一样,接下来我们来看看,Python中为什么会存在元组,以及他和列表(List)不一样的地方
定义一个元组
a=(1,2,3,4)
print(type(a))
# 输出 tuple
b=(1,True,0,'Apple',[1,2,[1,3]])
print(type(b))
# 输出 tuple
元组和列表的相同点
- 和列表一样元素也可以通过索引和切片的方式访问元素
a=(1,True,0,'Apple',[1,2,[1,3]])
# 通过索引访问
print(a[2])
# 输出 0
print(a[-1])
# 输出 [1,2,[1,3]]
# 通过切片访问
print(a[0:2])
# 输出 (1,2)
print(a[:-1])
# 输出 (1, True, 0, 'Apple')
- 通过 +、* 添加元素
a=(1,2,3)
a+=(4,5,6)
print(a)
# 输出 (1,2,3,4,5,6)
b=a*3
print(b)
# 输出 (1, 2, 3, 1, 2, 3, 1, 2, 3)
- 同样适用于元组的一些内置函数
a=(1,2,3)
# 判断一个元素是否存在于元组中
print(1 in a)
# 输出 True
# 获取元组的长度
print(len(a))
# 输出 3
# 获取元组中最大元素
print(max(a))
# 输出 3
# 获取元组中最小元素
print(min(a))
# 输出 1
# 获取元组中元素的下标
print(a.index(3))
# 输出 2
# 获取元组中元素的个数
print(a.count(2))
# 输出 1
# 计算元组中元素的和
print(sum(a))
元组和列表有什么区别
看到元组的定义和访问元素的方式,你可能会很困惑,别人家的语言都没这个数据类型,Python这不是找事吗?为什么要设计一个和列表一样属性的数据类型,老子是真学不动啦!先别急,你只需记住以下几点即可。
- 列表定义的时候使用[ ],元组使用( )
- 列表可以改变的,但是元组不可变,也就是元组定义好以后我们不能修改里面的元素
- 能使用元组的尽量使用元组
元组不能改变是什么意思
我们通过简单的代码演示一下数组的不可变性
a=(1,2,3,4,5)
a[0]=10
# 这个时候会抛出异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
因为元组中的元素不能修改,所以元素的没有append( )、insert( )等修改方法
删除元组
之前分享列表的时候提到删除列表的方法有很多,可以使用del、clear( )、remove( )、pop( ), 但是元组因为不能修改所以只能使用del清空元组,下面通过代码演示一下
a=(1,2,3,4)
# 删除元组
del a
元组的一些坑
- 定义一个元素的元组
# 定义一个元素的列表
print(type([1]))
# 输出 list
# 定义一个元素的元组
print(type((1)))
# 输出 int
# 因为( ) 在python中是数学运算符号
# 正确的做法是在元素后面添加一个逗号
print(type((1,)))
# 输出tuple
- 元组中的元素‘可变’
前面一直说元组中的元素不能修改,下面我们来演示一下元组中的元素可以修改
a=(1,2,[3,4,5])
a[0]=10
# 会报错
a[-1][-1]=10
print(a)
# 输出 (1,2,[3,4,10])
上面的案例没有报错,而且还修改成功了,你可能现在很困惑、元素到底能不能修改。
从表面上看,元组中的元素确实被修改了,但其实修改的不是元组中的元素,而是[3,4,5]这个列表中的元素。就好比元组中有三个盒子,分别是1、2、[3,4,5],这个三个盒子的位置不能变,但是这个盒子里装的东西可以变,你可以把这个盒子里的东西拿出来,你也可以往这个盒子装一头大象,但是不论你往盒子装什么,这个盒子还是之前的盒子,也就是元组中元素的指向没有发生变化。
总结:本篇文章主要分享了怎么定义一个元组、元组与列表的相同和不同之处,重点掌握元组的不可变性
网友评论