《Python零基础快乐学习之旅》学习笔记8——元组(tuple)

第8章 元组(tuple)

元组(Tuple)是Python提供的一种数据类型,它的结构与列表完全相同,但是元组与列表最大的区别在于:元组的元素值不可更改,元素个数不可变动。因此元组也被称为不可改变的列表。

8.1 元组的定义

列表在定义时是将元素放在中括号“[]”内,而元组的定义则是将元素放在小括号“()”内。元组的语法格式如下:

name_tuple = (元素1, 元素2, ..., 元素n,) # name_tuple是假设的元组名称

元组中的每一组数据称为元素,元素可以是整数字符串列表等,这些元素放在小括号“()”内,彼此之间用逗号“,”隔开,最右边的“,”可有可无。使用print()函数,将元组名称作为变量名称,可打印元组内容。如果元组内的元素只有一个,在定义时需要在元素的右边加上逗号“,”,如:tuple = (13,)

程序实例:

# 定义与打印元组
numbers = (1, 2, 3, 4, 5,)  # 定义元组元素是整数
fruits = ('apple', 'banana', 'orange')  # 定义元组元素为字符串
mixed = ('price', 30)       # 定义元组元素为不同类型的数据
val_tuple = (18,)   # 只有一个元素的元组
print(numbers, type(numbers))
print(fruits, type(fruits))
print(mixed, type(mixed))
print(val_tuple, type(val_tuple))

执行结果:

(1, 2, 3, 4, 5) <class 'tuple'>
('apple', 'banana', 'orange') <class 'tuple'>
('price', 30) <class 'tuple'>
(18,) <class 'tuple'>

8.2 读取元组元素

读取元组内容的方式与列表一样,都是使用中括号。元组元素的索引值从0开始,如要读取元组的第1个元素,则使用元组名称[0],读取索引值为i的元组元素则使用元组名称[i]。

程序实例:

# 读取元组元素
numbers = (1, 2, 3, 4, 5)  # 定义元组元素是整数
fruits = ('apple', 'banana', 'orange')  # 定义元组元素为字符串
mixed = ('price', 30)       # 定义元组元素为不同类型的数据
val_tuple = (18,)   # 只有一个元素的元组
print(numbers[1])
print(fruits[2])
print(mixed[1])
print(val_tuple[0])

执行结果:

2
orange
30
18

8.3 遍历所有元组元素

在Python中可以使用for循环遍历所有元组元素,用法与列表相同。

程序实例:

# 遍历元组元素
tuple1 = ('apple', '10086', 38, ['php', 'java', 'python'])
for t in tuple1:
    print(t)

执行结果:

apple
10086
38
['php', 'java', 'python']

8.4 修改元组内容

元组元素内容是不可更改的,更改元组元素内容会发生错误。

程序实例:

fruits = ('orange', 'pear', 'peach')    # 定义元组元素是字符串
print(fruits[1])                         # 打印元组fruits[0]
fruits[0] = 'banana'                    # 将元素内容更改为banana
print(fruits[0])

执行结果:
在这里插入图片描述

上述最后一行错误信息TypeError指出:tuple对象不支持赋值,相当于不可更改它的元素值。
元组内的直接数据如果修改则会立即报错,但是如果元组里面有列表,修改列表里面的数据是允许的。

# 元组内的直接数据如果修改则会立即报错,但是如果元组里面有列表,修改列表里面的数据是允许的
tuple2 = (1, 2, ['a', 'b', 'c'], 3, 6)
print(tuple2)  # (1, 2, ['a', 'b', 'c'], 3, 6)
tuple2[2].extend(['d', 'n', 'f'])
print(tuple2)  # (1, 2, ['a', 'b', 'c', 'd', 'n', 'f'], 3, 6)

如果要修改元组元素,只能使用重新定义元组的方式进行处理。

程序实例:

fruits = ('apple', 'banana', 'orange')
print("原始fruits元组元素:")
for fruit in fruits:
    print(fruit)

fruits = ('orange', 'cherry', 'peach')  # 定义新的元组元素
print("\n新的fruits元组元素:")
for fruit in fruits:
    print(fruit)

执行结果:

原始fruits元组元素:
apple
banana
orange

新的fruits元组元素:
orange
cherry
peach

8.5 元组切片(tuple slices)

元组切片的概念与列表切片相同,即根据某些规则,取元组内容的一部分。常用语法格式如下:

name_tuple[start:end]      # 读取从索引start到(end-1)索引的列表元素
name_tuple[:n] 		       # 取得列表前n名
name_tuple[n:] 			   # 取得列表索引n到最后
name_tuple[-n:]            # 取得列表后n名
name_tuple[:] 			   # 取得所有元素
name_tuple[start:end:step] # 每隔step,读取从索引start到(end-1)索引的列表元素

程序实例:

# 元组切片的应用
fruits = ('apple', 'banana', 'cherry', 'orange', 'pear', 'watermelon')
print(fruits[0:3])
print(fruits[:3])
print(fruits[2:])
print(fruits[-4:])
print(fruits[:])
print(fruits[1:6:2])

执行结果:

('apple', 'banana', 'cherry')
('apple', 'banana', 'cherry')
('cherry', 'orange', 'pear', 'watermelon')
('cherry', 'orange', 'pear', 'watermelon')
('apple', 'banana', 'cherry', 'orange', 'pear', 'watermelon')
('banana', 'orange', 'watermelon')

8.6 方法与函数

应用在列表上的方法或函数如果不会更改列表内容,则可以将它应用在元组。如len() index()count()。会更改列表内容的则不能应用到元组中,如:append()insert()pop()

# 元组数据不支持修改,只支持查找

# 1.按下标查找数据
tuple1 = ('java', 'php', 'c', 'c++', 'python', 'c#', 'go')
print(tuple1[2])  # c

# 2.index():查找某个数据,如果数据存在,返回对应的下标,否则报错。
print(tuple1.index('c'))  # 2

# 3.count():统计某个字符在当前元组出现的次数
print(tuple1.count('c'))  # 1

# 4.len():返回元组数据个数
print(len(tuple1)) # 7

8.7 列表与元组数据互转

在程序设计过程中,如果需要将列表(list)与元组(tuple)数据类型相互转换,可使用下列指令。

list():将元组数据类型转换成列表
tuple():将列表数据类型转换成元组

程序实例:

# 元组与列表相互转换
list1 = ['apple', 'banana', 'orange', 10086]
tuple1 = (110, 120, '119', '永不毕业的李华')
print(list1, type(list1))
print(tuple1, type(tuple1))
tuple1_list = list(tuple1)  # 将元组改为列表
tuple1_list.append('法外狂徒张三')    # 添加元素
print(tuple1_list, type(tuple1_list))

list1_tuple = tuple(list1) # 将列表改为元组
print(list1_tuple, type(list1_tuple))
list1_tuple.pop()

执行结果:
在这里插入图片描述

元组内建方法max()、min()的应用:

tup = (1, 3, 5, 7, 9)
print("元组tup中的最大值:%d" % max(tup))
print("元组tup中的最小值:%d" % min(tup))

执行结果:

元组tup中的最大值:9
元组tup中的最小值:1

8.8 元组的优点

  • 可以更安全地保护数据
 程序设计中,可能会遇到有些数据永远都不会改变的情况,将它存储在元组内,可以更安全地保护这些数据。如:图像处理时对象的长、宽或每一像素的色彩数据等。
  • 加快程序执行速度
  元组结构比列表简单,占用系统资源较少,程序执行速度较快。

divmod()函数的用法:

商,余数 = divmod(被除数, 除数)

divmod()函数的返回值其实是元组,所以可使用元组方式取得商和余数。

程序实例:

dist = 384400
speed = 1225
total_hours = dist // speed             # 小时数
data = divmod(total_hours, 24)
print("divmod()函数返回的数据及数据类型:",data, type(data))
print("商:", data[0])
print("余数:",data[1])

执行结果:

divmod()函数返回的数据及数据类型: (13, 1) <class 'tuple'>
商: 13
余数: 1

往期文章:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值