前言
本文主要介绍Python中的元组(tuple),主要内容包括 元组简介、元组特性、元组的基本操作。
文章目录
- 前言
- 一、元组简介
- 二、元组特性
- 1、不可变性
- 2、有序性
- 3、异构性
- 4、可以嵌套使用
- 5、元组类型比列表类型更加节省内存空间
- 三、元组的基本操作
- 1、创建
- 2、索引
- 3、切片
- 4、查询
- 5、统计
- 6、拼接
- 7、修改
一、元组简介
元组是一系列不可变的Python对象,一种序列。元组的定义语法为:(元素1, 元素2, …, 元素n),如:
my_tuple = (1, 2, 3)
print(type(my_tuple))
输出结果:
<class 'tuple'>
二、元组特性
1、不可变性
元组的元素不可修改,一旦创建之后就不能再改变,如:
my_tuple = (1, 2, 3)
my_tuple[1]=5print(type(my_tuple))
输出结果:
TypeError: 'tuple' object does not support item assignment #TypeError: 'tuple'对象不支持项赋值
2、有序性
元组是有序的,每个元素都有固定的位置。可以通过索引来访问元素,也可以使用切片来获取元素的子集,如:
my_tuple = (1, 2, 3)
print(my_tuple[2])
print(my_tuple[:2])
输出结果:
3
(1, 2)
3、异构性
元组可以包含不同类型的元素,比如整数、浮点数、字符串等,如:
my_tuple = (1, 1.20, "hello",[3,4])
print(my_tuple)
输出结果:
(1, 1.2, 'hello', [3, 4])
4、可以嵌套使用
元组中的元素可以是其他元组,这样就可以形成嵌套的元组结构,如:
my_tuple = (1, 2,3 ,(4,5,6))
print(type (my_tuple[3]))
输出结果:
<class 'tuple'>
5、元组类型比列表类型更加节省内存空间
两者的内存占用情况相比较而言,元组占用的内存空间更小,如:
#引入sys 文件,我们要用到sys中的getsizeof()来获取对象占用内存的大小
import sysmy_tuple = (1, 2, 3, 4, 5)
my_list = [1, 2, 3, 4, 5]
print("元组内存占用: ",sys.getsizeof(my_tuple))
print("列表内存占用: ",sys.getsizeof(my_list))
输出结果:
元组内存占用: 80
列表内存占用: 104
三、元组的基本操作
元组的基本操作有创建、索引、切片、查询、统计、拼接等。
1、创建
创建一个元组可以使用小括号,多个元素之间用逗号 , 分隔,如:
my_tuple1 = ()my_tuple2 = (1,) #这里的,号不能省略,否则my_tuple2会被定义成int类型
my_tuple3 = ('apple', 'banana', 'cherry')print(type (my_tuple1))
print(type (my_tuple2))
print(type (my_tuple3))
输出结果:
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
2、索引
索引的操作就是根据位置获取数组中的单个值,如:
my_tuple = (1, 2, 3)
print(my_tuple[1])
print(my_tuple[2])
输出结果:
2
3
3、切片
切片就是从元组中取多个元素的操作。下面我们看几个例子:
my_tuple = ('a', 'b', 'c', 'd', 'e', 'f', 'g')
print(my_tuple[1:3])
print(my_tuple[-3:-1])
print(my_tuple[:3])
print(my_tuple[:])
print(my_tuple[2::])
print(my_tuple[::2])print(type(my_tuple[::2]))
输出结果:
('b', 'c')
('e', 'f')
('a', 'b', 'c')
('a', 'b', 'c', 'd', 'e', 'f', 'g')
('c', 'd', 'e', 'f', 'g')
('a', 'c', 'e', 'g')
<class 'tuple'>
可以从例子看出来切片的几种写法和功能:
1.my_tuple[a:b]:取元组中下标为 a ~ b -1 的元素,可以用区间表示为 [a, b)
2.my_tuple[a:]:取元组中下标为 a ~ 列表最后的元素
3.my_tuple[:b]:取元组中下标为 b - 1 及其之前的元素
4.my_tuple[:]:取元组中的所有元素
5.my_tuple[a🅱️c]:在元组下标为 a ~ b -1 的元素中,每间隔c取一个元素
4、查询
可以使用 in 或 not in 运算符来判断元素是否存在于元组中,如:
my_tuple= (1, 2, 3)
print(2 in my_tuple)
print(4 not inmy_tuple)
输出结果:
True
True
5、统计
可以使用count()来统计列表内相同元素的个数的,如:
my_tuple = (1, 2, 3, 2, 4, 2)
print(my_tuple.count(2))
输出结果:
3
6、拼接
使用 + 运算符可以将两个元组合并成一个新的元组,如:
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
my_tuple = tup1 + tup2
print(my_tuple)
输出结果:
(1, 2, 3, 4, 5, 6)
7、修改
元组是不可变的,因此不能通过赋值语句来修改元素的值。不过,可以创建一个新的元组来替代原来的元组,从而间接地“修改”元组,如:
my_tuple = (1, 2, 3)
my_tuple = (4, 5, 6)
print(my_tuple)
输出结果:
(4, 5, 6)
还有一种特殊情况,当元素是可变对象时,对象内部属性是可以修改的!如:
my_tuple = ('a', 'b', ['A', 'B'])
my_tuple[2][0] = 'X'
my_tuple[2][1] = 'Y'
print(my_tuple)print(type(my_tuple[2]))
输出结果:
('a', 'b', ['X', 'Y'])
<class 'list'>
这里是因为第三个元素是list类型,而list本身就是可以被修改的。而元组中指向的第三个元素始终没有,它还是指向最初那个列表,变的是列表里面的内容。