Python 元组

元组

定义

列表 与 元组 都可以用来存储一系列元素

列表可以动态地修改元素以及列表组成,虽然元组也能存储一堆元素,但是不可以动态地修改其元素的值,所以元组适合存储一些在整个程序生命周期中都不会改变的值

与列表不同,元组使用 圆括号() 标识

>>> example = (10, 20)
>>> print(example)
(10, 20)

若直接输出打印元组,与列表一样,都会 打印元组的内部表示

单元素元组的歧义问题

注意:元组若只包含一个元素,容易产生歧义

为了消除这个歧义,需要在这个元素后面添加逗号以区分

方式:变量 = (元素, )

>>> a = (1)
>>> type(a)
<class 'int'>
>>> a = (1, )
>>> type(a)
<class 'tuple'>

若不消除歧义,则可能变量被解释为其他类型

空元组

空元组定义为: 变量 = ()

>>> student = ()
>>> type(student)
<class 'tuple'>

定义元组的其他方式

若定义变量时,直接用逗号隔开,默认为元组

>>> a = 'Hello', 'World', '123'
>>> type(a)
<class 'tuple'>
>>> print(a)
('Hello', 'World', '123')

访问元组的值

访问元组的方式与列表一样,都使用 索引 访问元组的元素

方式:元组名[索引]

>>> example = (10, 20)
>>> print(example[0])
10
>>> print(example[1])
20

定义声明元组使用的是 圆括号,而定义声明列表使用的是 方括号

但是访问两者各自元素时,都是通过 方括号 来存放 索引,并且在方括号前指名 元组名列表名

>>> cars = ['honda', 'toyota', 'bmw']
>>> print(cars[0])
honda
>>> food = ('rice', 'ice cream')
>>> print(food[0])
rice

遍历元组

使用 for循环 遍历元组

>>> student = ('David', 'Bob', 'Mary', 'Lisa')
>>> for i in student:
...     print(i)
... 
David
Bob
Mary
Lisa

从整体上修改元组

若直接修改元组内元素的值,会被提示 类型错误 TypeError

>>> examples = (10, 20)
>>> examples[0] = 15
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

由于不能以赋值的方式修改元组内单个元素,所以若要修改元组时,需要重新定义整个元组,即 给存储元组的变量赋值,定义一个新元组赋值给存储原元组的变量

>>> print("Original")
Original
>>> examples = (20, 10)
>>> for i in examples:
...     print(i)
... 
20
10
>>> examples = (30, 10)
>>> for i in examples:
...     print(i)
... 
30
10

关键:给存储元组的变量重新赋值

元组无法动态地 增、删,也不能在使用中对单个元素进行修改,所以只能通过对 存储元组的变量 重新赋值的方式,从整体上来修改元组,因为元组无法像列表一样动态的改变

元组复制

可以使用 星号(*) 实现复制

>>> a = ('Hello', 'World', '123')
>>> b = a * 2
>>> print(b)
('Hello', 'World', '123', 'Hello', 'World', '123')

若直接将元组变量赋值给另外一个元组变量,与列表不同,这里的复制是真的复制了一个新的元组

>>> a = (1, 2, 3)
>>> b = a
>>> print(a)
(1, 2, 3)
>>> print(b)
(1, 2, 3)
>>> a = (2, 3, 4)
>>> print(a)
(2, 3, 4)
>>> print(b)
(1, 2, 3)

在列表中,如果使用这种复制方式,实现的效果是两个变量指向同一个列表而此处 a 与 b 元组是完全不同的两个元组

删除元组

可以使用 del语句 删除整个元组,元组内部的元素是不能删除的

>>> examples = (1, 2)
>>> del examples
>>> examples
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'examples' is not defined

元组连接组合

元组之间是可以进行连接的,通过 加号(+) 进行连接

>>> men = ('David', 'Bob')
>>> women = ('Mary', 'Lisa')
>>> student = men + women
>>> print(student)
('David', 'Bob', 'Mary', 'Lisa')

切片操作

切片操作在元组内也适用

>>> student = ('David', 'Bob', 'Mary', 'Lisa')
>>> student[1:3]
('Bob', 'Mary')

与列表中的切片使用类似:[第一个元素 : 第二个元素]

  • 若两个元素都指定,从第一个元素开始,一直到第二个元素(不包含第二个元素)
  • 若第一个元素未指定,则表示从元组第一个元素开始
  • 若第二个元素未指定,则表示从第一个元素开始一直到最后一个元素
  • 若第一个元素、第二个元素都未指定,则表示整个元组
  • -1表示最后一个元素,同理 -2表示倒数第二个元素
  • 若元组为空,则无法访问 -1,会报索引错误
>>> student = ()
>>> type(student)
<class 'tuple'>
>>> print(student[-1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

获取元组长度

使用函数 len() 可以获取元组的长度

>>> student = ('Bob', 'Sean', 'Lisa', 'Jack')
>>> print(len(student))
4

元组输出格式调整

  • title() 首字母大写
  • lower() 全小写
  • upper() 全大写
>>> student = ('Bob', 'Sean', 'Lisa', 'Jack')
>>> for i in student:
...     print(i.title())
...     print(i.lower())
...     print(i.upper())
... 
Bob
bob
BOB
Sean
sean
SEAN
Lisa
lisa
LISA
Jack
jack
JACK

列表转元组函数

使用函数 tuple(),参数为 要转化的列表

>>> cars = ['bmw', 'audi', 'toyota', 'honda']
>>> type(cars)
<class 'list'>
>>> tup_cars = tuple(cars)
>>> print(tup_cars)
('bmw', 'audi', 'toyota', 'honda')
>>> type(tup_cars)
<class 'tuple'>

数字元组

可以使用 range()函数tuple()函数,生成数字元组

>>> tup1 = tuple(range(1, 6))
>>> type(tup1)
<class 'tuple'>
>>> print(tup1)
(1, 2, 3, 4, 5)

元组统计函数

  • min()
  • max()
  • sum()

min()、max()对于字符串、数字元组都可以使用,而 sum() 只用于数字元组

>>> tup1 = tuple(range(1, 6))
>>> min(tup1)
1
>>> max(tup1)
5
>>> sum(tup1)
15

元组查找操作

若知道要查找的值,可以使用函数 index(),参数是要查找的值

>>> tup1 = tuple(range(1, 6))
>>> print(tup1.index(1))
0

统计查找的值在元组中出现了多少次,可以使用函数 count(),参数是要统计的值

>>> tup = (1, 1, 1, 2, 2, 3, 4, 5)
>>> print(tup.count(1))
3
>>> print(tup.count(2))
2
>>> print(tup.count(3))
1
posted @ 2021-02-02 15:01  SeanSiyang  阅读(115)  评论(0编辑  收藏  举报