python元组
什么是元组(tuple)
定义
与列表(list)一样,元组(tuple)也是序列,唯一的区别在于元组是不能修改的(你可能注意到了,字符串也不能修改)。
元组语法很简单,只要将一些变量用逗号(,
)分隔,就能自动创建一个元组。元组还可用圆括号(()
)括起(这也是通常采用的做法)
a=1, 2, 3 print(a) a=(1,2,3)
创建一个元组(tuple)
通过将所有项目(元素)放在括号内 ()
(以逗号(,
)分隔)来创建元组。括号是可选的,但是,使用括号是一个好习惯。
元组可以具有任意数量的项,并且它们可以具有不同的类型(整数(int
),浮点数(float
),列表(list
),字符串(string
)等)。
也可以在不使用括号的情况下创建元组。这称为元组包装。
用一个元素创建一个元组有点特殊。
只有一个元素的元组,括号内仅包含一个元素是不够的。我们将需要一个逗号结尾来表明它实际上是一个元组。
my_tuple = ("hello",) print(type(my_tuple))
访问元组元素
我们可以通过多种方式访问元组的元素。
1.索引
我们可以使用索引运算符 []
访问索引从 0
开始的元组中的项目。
因此,具有 6 个元素的元组将具有从 0
到 5
的索引。尝试访问元组之外的元素(例如 6
、7
...)将引发 IndexError
。
索引必须是整数;因此我们不能使用 float
或其他类型。如果使用会导致 TypeError
。
my_tuple = ('p','e','r','m','i','t') print(my_tuple[0]) #p print(my_tuple[5]) #t # 嵌套元组 n_tuple = ("mouse", [8, 4, 6], (1, 2, 3)) # 嵌套索引 print(n_tuple[0][3]) #s print(n_tuple[1][1]) #4
更换元组
与列表不同,元组是不可变的。
这意味着一旦分配了元组的元素就无法更改。但是,如果元素本身是可变的数据类型(如列表),则可以更改其嵌套项目。
我们还可以将元组分配给不同的值(重新分配)。
# 定义一个内嵌列表的元组 tuple_1 = (4, 2, 3, [9]) # 对列表进行添加操作 tuple_1[3].append(5) print(tuple_1) #(4, 2, 3, [9, 5]) my_tuple = ('p','r','o','g','r','a','m','i','z') # 将元组分配给不同的值 tuple_2 = my_tuple print(tuple_2) #('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
我们可以使用 +
运算符来合并两个元组。这也称为串联。
我们还可以使用运算符 *
,将元组中的元素重复给定次数。
无论 +
和 *
操作会导致新的记录。
删除元组
如上所述,我们不能更改元组中的元素。这也意味着我们无法删除或删除元组中的项目。
但是可以使用关键字 del
完全删除一个元组。
元组方法
元组(tuple
)不提供添加项目或删除项目的方法。仅以下两种方法可用。
count(x)
index(x)
my_tuple = ('p','p','p','l','e',) print(my_tuple.count('p')) #3 print(my_tuple.index('l')) #3
1.元组成员资格测试
我们可以使用关键字 in
来测试项目是否存在于元组中。
2.遍历元组
使用 for
循环,我们可以遍历元组中的每个元素。
for name in ('John','Kate'): print("Hello",name)
列表和元组的区别与总结
列表(list)
- 列表是动态数组,可变(增加、修改不会使 ID 发生变化)且可以重设长度(包括增加、删除、修改元素)
- 列表中的元素可重复,元素之间的类型可以不同,元素的值可以修改
- 使用
[]
来定义列表 - 可以索引,可以切片
- 列表常用来保存多个独立的同质(homogeneous)对象,例如北上广深的人口数量
- 由于列表是动态数组,支持
resize
操作,因此当一个列表没有空位放新的元素的时候,Python 会创建一个新的列表,把老的列表里面的元素以及新添加的元素放进去,同时把旧的列表销毁。 - 当我们试图创建一个有
n
个元素的列表时,Python 会创建一个可以放n+k
个元素的列表,为未来添加元素预留了k
个位置,这样可以减少分配空间和内存复制的次数(很耗费计算资源),从而节省计算资源。 - 所以说保存同样的元素个数的时候,元组占用的空间更小。
元组(tuple)
-
元组是静态数组,不可变且内部数据一旦创建便无法改变(此外,数字、字符串也属于不可变类型)
-
元组里的元素、元组的大小在创建完成以后不能改变,如果赋新的值则 ID 会发生变化
-
注意,这里的不可变指的是元组中每一个元素对象的引用(指针)不可变,但是如果某个元素对象本身是可变的对象,那么你是可以对这个可变对象进行修改的。例如,元祖里面有一个元素是列表,这个列表里面的内容是可以修改的。
-
元组里元素的类型可以不同
-
使用
()
来定义元组 -
可以切片、可以索引
-
元组常用来描述一个不会改变的事物的多个异质(heterogeneous,对比上面的“同质”,意思是不同位置的元素表达不同的意思)属性,例如一个城市的经纬度。这也是为什么元组不可变而列表可变的原因,因为列表储存同质的对象,例如北上广深的人口数,我们可以再加上成都苏州的人口数、或者删掉深圳的人口数也没有问题,但是元组里面一个城市的经纬度删掉一个或者修改一个是没有意义的。
-
关于可变与不可变的另一个例子:你外出散步的时候可以用元组
(x,y)
描述当前的经纬度,如果你想记录自己的轨迹,那么可以用列表记录每一秒的[(x,y)]
。 -
由于字典的
key
必须是不可变类型,因此列表不能作为字典的key
,但是元组可以 -
如果实在想修改已经定义好的元组:
①可以通过切片来实现删除元素的功能;
②可以通过
+
运算来实现拼接的功能,类似于列表的resize
操作 -
创建元组的速度比创建列表的速度快 3-5 倍。一般不再用到的变量所占用的资源会被释放还给操作系统,但是长度为 1-20 的元组即使不再使用了,也不会把它们占用的资源立刻还给操作系统,而是留作未来使用,这样在以后创建同样大小的元组的时候,就不用重新申请内存了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南