05 元组 tuple
一、元组的基本特性
1.元组可以通过下标访问,不支持原位改变:而元组一旦被创建,它的元素就不可更改了,所以元组是不可变序列;
2.是任意对象的有序集合,长度是固定的
3.可以任意嵌套,元组可以存储整数、实数、字符串、列表、元组等任何类型的数据,并且在同一个元组中,元素的类型可以不同
4.在可以使用元组的场景,尽量使用元组,会比list效率高;
二、元组的声明
2.1 可以通过()来创建一个tuple
>>> t = (1,2,3,4)
>>> t
(1, 2, 3, 4)
无法改变tuple中的值,会抛出一个异常
>>> t
(1, 2, 3, 4)
>>> t[0]
1
>>> t[0]=12
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
元组向后追加, 会生成一个新的tuple,之前的tuple是没有改变的
t = 1,2,3
t
(1, 2, 3)
r = t + ('a','b')
t
(1, 2, 3)
r
(1, 2, 3, 'a', 'b')
2.2 元组tuple的圆括号是可以省略的
在创建一个元组的时候,可以不用圆括号,会自动加上一个括号
t = 1,2,3,4,5
type(t)
<class 'tuple'>
2.3 元组tuple的声明只包含一个变量,需要有逗号
如下所示,如果元组只有一个变量,需要在声明的时候后面加上一个,
>>> t1 = (40,)
>>> t1
(40,)
>>> t1=(40)
>>> t1
40
2.4 一行声明多个变量,实际也是通过元组来实现的
2.4.1一行声明多个变量,就是元组的赋值
>>> x,y = 5,10
>>> print(x,y)
5 10
2.4.2交换变量的方法
可以直接交换两个变量的值,而不需要再定义第三方的变量,实际上是python内部已经通过函数实现了交换。
具体内容可以见python笔记或者扩展阅读:
https://blog.csdn.net/qq_33414271/article/details/78522235
http://www.cnblogs.com/Eva-J/p/5534037.html#commentform
>>> print(x,y)
5 10
>>> x,y = y,x
>>> print(x,y)
10 5
三、元组的操作
3.1元组的遍历
3.1.1通过for循环来访问 遍历元组元素
可以通过for循环来访问元组中的元素
>>> str1 = 'HelloKitty'
>>> t1 = tuple(str1)
>>> t1
('H', 'e', 'l', 'l', 'o', 'K', 'i', 't', 't', 'y')
>>> for t in t1:
... print(t,end='|')
...
>>> '\n'
H|e|l|l|o|K|i|t|t|y|'\n'
3.1.2元组tuple支持推导
tuple属于可迭代对象,支持推导,如求一个tuple各个元素的平方
>>> t1
(1, 3, 5, 7, 9)
>>> listA = [i**2 for i in t1]
>>> listA
[1, 9, 25, 49, 81]
3.2元组的连接操作
可以对两个元组进行连接操作,形成一个新的元组。
注意这个地方可以操作的原因,是因为此时并未原位改变,只是形成了新的元组而已。
>>> (1,2,3,4) + ('aa','bb','cc')
(1, 2, 3, 4, 'aa', 'bb', 'cc')
3.3元组查找下标的index()方法
和list相同使用.index()方法
(1, 3, 5, 7, 9)
>>> t1.index(5)
2
3.4元组统计一个元素出现多少次
和list相同,使用.count()方法
>>> t1 =(1,2,1,5,12,1,3,11,2)
>>> t1.count(2)
2
3.4 元组的修改操作
元组为不可原位改变的序列,元组中的元素是不能被修改的,对元组的操作实际上是创建一个新的元组。
3.4.1 元组增加元素,不支持append方法
>>>t
(1, 2, 3)
t.append('a')
Traceback (most recent call last):
File "C:\Program Files\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
3.4.2 元组删除元素,不支持del全局函数删除元素
t
(1, 2, 3)
del(t[0])
Traceback (most recent call last):
File "C:\Program Files\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
3.4.3 可以删除整个元组
t
(1, 2, 3)
id(t)
2965023565824
del(t)
t
Traceback (most recent call last):
File "C:\Program Files\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
NameError: name 't' is not defined. Did you mean: 'tt'?
id(t)
Traceback (most recent call last):
File "C:\Program Files\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
NameError: name 't' is not defined. Did you mean: 'tt'?
四、命名的元组:namedtuple
namedtuple需要导入一个collections的模块,来实现功能。
namedtuple是一种数据的格式,是元组和list的混合体,类似类的功能。
如下所示,定义一个namedtuple为Employee,后面定义了几个参数:name,age...
并且通过Employee创建了一个实列(暂且这样称呼)
namedtuple可以实现不定义类,直接实现一个类似的类的功能的效果.
>>> from collections import namedtuple
>>> Employee = namedtuple('Employee')
>>> Employee = namedtuple('Employee',['name','age','department','salary'])
>>> jerry = Employee(name='Jerry',age=30,department='dev',salary=120000.00)
>>> jerry.name
'Jerry'
>>> jerry.age
30
>>> type(jerry)
<class '__main__.Employee'>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步