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')

img

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'>
posted on 2022-07-25 17:24  飞飞fly  阅读(141)  评论(0编辑  收藏  举报