上一章Python教程请查看:python3列表list
在本文中,你将学习关于Python元组的所有内容,更具体地说,什么是元组、如何创建它们、何时使用它们以及你应该熟悉的各种方法。
Python中的tuple类似于列表,两者之间的区别是,一旦tuple被赋值,我们就不能更改它的元素,而在列表中,元素是可以更改的。
创建一个元组
元组是通过将所有项(元素)放在圆括号()中,用逗号分隔来创建的,圆括号是可选的,但是,最好使用它。
元组可以有任意数量的项,它们可以是不同类型的(整数、浮点数、列表、字符串等)。
# 空元组
my_tuple = ()
print(my_tuple) # 输出: ()
# 包含整数的元组
my_tuple = (1, 2, 3)
print(my_tuple) # 输出: (1, 2, 3)
# 包含混合数据类型的元组
my_tuple = (1, "Hello", 3.4)
print(my_tuple) # 输出: (1, "Hello", 3.4)
# 嵌套元组
my_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
# 输出: ("mouse", [8, 4, 6], (1, 2, 3))
print(my_tuple)
元组也可以在不使用括号的情况下创建,这就是所谓的元组包装。
my_tuple = 3, 4.6, "dog"
print(my_tuple) # 输出: 3, 4.6, "dog"
# 元组拆包也是可能的
a, b, c = my_tuple
print(a) # 3
print(b) # 4.6
print(c) # dog
创建一个只有一个元素的tuple有点棘手。
仅在括号内包含一个元素是不够的,我们需要一个逗号来表示它实际上是一个元组。
my_tuple = ("hello")
print(type(my_tuple)) # <class 'str'>
# 创建一个只有一个元素的元组
my_tuple = ("hello",)
print(type(my_tuple)) # <class 'tuple'>
# 括号是可选的
my_tuple = "hello",
print(type(my_tuple)) # <class 'tuple'>
访问元组元素
我们可以通过多种方式访问元组的元素。
1.索引
我们可以使用索引操作符[]来访问tuple中的一个项,其中索引从0开始。
所以,一个有6个元素的元组的索引范围是从0到5,尝试访问tuple之外的元素(例如6、7、…)将引发一个IndexError。
索引必须是整数,所以我们不能使用浮点数或其他类型,否则将导致类型错误。
同样,使用嵌套索引访问嵌套元组,如下面的示例所示。
my_tuple = ('p','e','r','m','i','t')
print(my_tuple[0]) # 'p'
print(my_tuple[5]) # 't'
# IndexError: list index out of range
# print(my_tuple[6])
# 索引必须是整数
# TypeError: list indices must be integers, not float
# my_tuple[2.0]
# 嵌套元组
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
# 嵌套索引
print(n_tuple[0][3]) # 's'
print(n_tuple[1][1]) # 4
2. 负索引
Python允许对它的序列进行负索引。
下标-1表示最后一项,下标-2表示倒数第二项,依此类推。
my_tuple = ('p','e','r','m','i','t')
# 输出: 't'
print(my_tuple[-1])
# 输出: 'p'
print(my_tuple[-6])
3.切片
我们可以使用切片操作符——冒号“:”来访问元组中的一系列项。
my_tuple = ('a','b','c','d','e','f,'g','h','i')
print(my_tuple[1:4])
print(my_tuple[:-7])
print(my_tuple[7:])
print(my_tuple[:])
通过将索引考虑到如下所示的元素之间,切片可以得到最佳的可视化效果。因此,如果我们想要访问一个范围,我们需要从tuple中切片的索引。
更改一个元组
与列表不同,元组是不可变的。
这意味着一旦元组的元素被分配,它就不能被改变,但是,如果元素本身是类似list的可变数据类型,则可以更改其嵌套项。
我们还可以将元组分配给不同的值(重新分配)。
my_tuple = (4, 2, 3, [6, 5])
# TypeError: 'tuple' object does not support item assignment
# my_tuple[1] = 9
# 但是,可变元素的项可以更改
my_tuple[3][0] = 9 # 输出: (4, 2, 3, [9, 5])
print(my_tuple)
# 元组可以重新分配
my_tuple = ('a','b','c','d','e','f,'g','h','i')
print(my_tuple)
我们可以使用+运算符来组合两个元组,这也称为连接。
我们还可以使用*操作符重复元组中的元素一定次数。
+和*操作都会产生一个新的元组。
# 输出: (1, 2, 3, 4, 5, 6)
print((1, 2, 3) + (4, 5, 6))
# 重复操作
# 输出: ('Repeat', 'Repeat', 'Repeat')
print(("Repeat",) * 3)
删除一个元组
如上所述,我们不能更改元组中的元素,这也意味着我们不能从tuple中删除或删除项。
但是使用关键字del完全删除一个tuple是可能的。
my_tuple = ('a','b','c','d','e','f,'g','h','i')
# 不能删除元素
# TypeError: 'tuple' object doesn't support item deletion
# del my_tuple[3]
# 可以删除整个元组
del my_tuple
# NameError: name 'my_tuple' is not defined
print(my_tuple)
元组的方法
添加项或删除项的方法在tuple中不可用,只有以下两种方法可用。
Python Tuple元组的方法
方法 | 说明 |
count(x)
| 返回x的数量 |
index(x)
| 返回第一项的下标,该下标等于x |
一些Python元组方法的例子:
my_tuple = ('a','p','p','l','e',)
print(my_tuple.count('p')) # 输出: 2
print(my_tuple.index('l')) # 输出: 3
其他元组操作
1. 元组成员测试
我们可以使用关键字in来测试一个项是否存在于一个元组中。
my_tuple = ('a','p','p','l','e',)
# 输出: True
print('a' in my_tuple)
# 输出: False
print('b' in my_tuple)
# 输出: True
print('g' not in my_tuple)
2. 遍历一个元组
使用for循环,我们可以遍历元组中的每个项。
# 输出:
# Hello AAA
# Hello BBB
for name in ('AAA','BBB'):
print("Hello",name)
元组相对于列表的优点
由于元组与列表非常相似,所以它们也都用于类似的情况。
但是,与列表相比,实现tuple有一定的优势,以下是一些主要优点:
- 我们通常对异构(不同)数据类型使用tuple,对同构(类似)数据类型使用list。
- 由于元组是不可变的,因此遍历元组比使用列表要快,所以有一个轻微的性能提升。
- 包含不可变元素的元组可以用作字典的键,对于列表,这是不可能的。
- 如果数据没有变化,将其实现为tuple将保证它保持写保护。
评论前必须登录!
注册