1. 创建元组
-
元组(tuple)是一种有序且不可更改的集合,元组中允许存在重复的成员。
-
创建空元组
-
在Python中,
()
表示一个空元组 -
也可以通过
tuple
的方式来创建一个空元组
a = ()
print(type(a)) # <class 'tuple'>
b = tuple()
print(type(b)) # <class 'tuple'>
- 创建非空元组
- 创建元组时可以在
()
中设置元组的初始值 - 元组中存放的元素可以是不同类型的
a = (1, 2, 3)
print(type(a)) # <class 'tuple'>
print(a) # (1, 2, 3)
a = (1, 'hello', [1 ,2])
print(type(a)) # <class 'tuple'>
print(a) # (1, 'hello', [1, 2])
2. 修改元组元素
- 元组的功能和列表基本是一致的,但元组是一个不可更改的集合,因此元组没有提供任何修改元组的方法。如果想要修改元组中的值,可以将元组转换成列表,更改列表后再将其转换回元组
a = (1, 2, 3, 4)
tmp = list(a) # 将元组转换成列表
tmp[0] = 'hello' # 更改列表
a = tuple(tmp) # 将列表转换回元组
print(a) # ('hello', 2, 3, 4)
3. 查找元组元素
3.1 in和in not操作符
a = (1, 2, 3, 4)
print(1 in a) # True
print(10 in a) # False
print(1 not in a) # False
print(10 not in a) # True
3.2 index方法
a = (1, 2, 3, 4)
print(a.index(1)) # 0
# print(a.index(10)) # 不存在,抛异常
- 需要注意的是index()中查找的值,返回的是该值在元组中的下标
4. 下标访问元组元素
4.1 下标访问
- 通过下标访问操作符
[]
可以获取指定下标位置的元素 - 可以通过下标修改访问到的元素的值
a = (1 ,2 , 3 ,4)
print(a[1]) # 2
a[1] = 100 # [1, 100, 3, 4]
print(a)
- 如果指定下标的值超过了列表中的最大下标,则会抛出异常。
4.2 负索引
a = [ 1, 2 ,3,4]
#正索引 0 1 2 3
#负索引 -4 -3 -2 -1
print(a[-1]) # 4
- 不难发现,这里的操作和list中的一样
5. 遍历元组元素
5.1 循环
a = (1, 2, 3, 4)
for i in a:
print(i)
i = i + 1 # 1 2 3 4 # 不会修改tuple中的值
print(a) # (1, 2, 3, 4)
for i in range(len(a)):
print(a[i])
print(a) # (1, 2, 3, 4)
i = 0
while i < len(a):
print(a[i]) # 1 2 3 4
i += 1
6. 子元组提取
语法 : [起始下标 : 结束下标]
- 以
[起始下标 : 结束下标]
的方式可以从元组中提取出,从起始下标开始到结束下标的一组元素。 - 左闭右开的区间
a = (1,2,3)
print(a[0:1]) # (1,)
print(a[0:2]) # (1, 2)
- 比较特殊的,打印出来的结果如果只有一个值的话还会跟一个逗号
切片时省略边界
- 提取子元组的过程也叫做切片的过程,以
[起始下标 : 结束下标]
的方式切片时可以省略起始下标或结束下标。 - 如果以
[起始下标 : ]
的方式进行切片,则子元组中的元素包括起始下标的元素及其后续元素。 - 如果以
[ : 结束下标]
的方式进行切片,则子元组中的元素包括结束下标之前的所有元素。 - 如果以
[ : ]
的方式进行切片,则子元组中的元素包括原元组中的所有元素。
a = (1, 2, 3, 4)
print(a[1:]) # (2, 3, 4)
print(a[:3]) # (1, 2, 3)
print(a[:-2]) # (1, 2)
print(a[:]) # (1, 2, 3, 4)
- 切片时也可以使用负索引。
切片时指定步长
- 以
[起始下标 : 结束下标 : 步长]
的方式切片可以指定步长,即每访问一个元素后下标自增几步
a = (1 ,2 ,3 ,4 ,5 ,6 ,7, 8, 9)
print(a[1::2]) # (2, 4, 6, 8)
print(a[1::-1]) # (2, 1)
print(a[1:-1:1]) # (2, 3, 4, 5, 6, 7, 8)
print(a[-1:1:-1])# (9, 8, 7, 6, 5, 4, 3)
print(a[1:1000]) # (2, 3, 4, 5, 6, 7, 8, 9) # 越界
- 切片时指定的步长也可以为负数,这时表示从后往前提取元素
- 如果切片时填写的下标超出了有效范围,运行程序后不会抛异常,而是尽可能把符合要求的元素提取出来
7. 拼接元组
7.1 使用 + 拼接列表
- 使用+可以把两个元表拼接在一起
- 使用+拼接后会生成一个新的列表,该操作不会影响两个原有列表。
- 使用+=也可以把一个列表拼接到另一个列表的后面
a = (1 ,2 ,3)
b = (3 ,4 ,5)
c = a + b
print(c) # (1, 2, 3, 3, 4, 5)
print(a) # (1, 2, 3)
a += b
print(a) # (1, 2, 3, 3, 4, 5)
- 元组是一个不可更改的集合,因此元组没有提供extend方法将一个元组拼接到另一个元组后面。