前言:
元组是轻量级的列表,虽然列表功能很强大,但是负担也很重,效率不高,有时不需要这么多功能,列表应运而生。
一.形式
(1)元组的所有元素都放在一对圆括号()中
(2)如果元组中只有一个元素,则必须在最后增加一个,(逗号)
如:(1,)
二.元组的创建与访问
(1)x=(1,2,3)
(2)tuple(可迭代对象)
(3)返回值是元组的函数,如enumrate函数和zip函数
三.元组与列表的异同点
相同点
1.列表和元组都属于有序序列,支持双向索引访问其中元素
2.都可以使用index(value)、count(value)方法,len()、map()、zip()、filter()、sorted()、enumerate()、reduce()内置函数
不同点
1.元组属于不可变序列,不可以对元组中的元素进行添加,插入,删除操作。
2.不能使用原地操作的函数和方法,除del指令外。
3.切片只有访问功能。
4.删除的操作只能用del命令,而且只能删除整个元组。
5.生成器推导式返回一个生成器对象,而不是元组。
四.元组的优点
1.内部优化比列表好,访问速度比列表快。
2.元组属于不可变序列,使代码更安全。
五.用途
1.对常量值(常量不可变,方便用元组进行存储)进行遍历。
2.调用函数时,使用元组作为参数可以防止参数在传递过程中被修改。
3.可作为字典的键,也可作为集合的元素。列表中不建议嵌套元组,因为元组一旦设定只能进行整体修改或整体删除,不能进行局部修改。
4.元组可哈希,用hash()函数可判断对象是否可哈希,若不可哈希就会报错。
#在列表中嵌套元组
#1.尝试对元组做部分修改---报错
#部分修改
x=[1,2,3,4,5,(6,7,8)]
x[5][0]=(1,2) #将元组中6替换为(1,2)
print(x) #TypeError: 'tuple' object does not support item assignment,元组不支持赋值
#部分删除
x=[1,2,3,4,5,(6,7,8)]
del x[5][0] #删除元组中的6
print(x) #TypeError: 'tuple' object doesn't support item deletion,元组不支持删除
#2.尝试对元组做整体修改或删除---成功
#整体修改
x=[1,2,3,4,5,(6,7,8)]
x[5]=(1,2) #将元组替换为(1,2)
print(x) #[1, 2, 3, 4, 5, (1, 2)]
#整体删除
x=[1,2,3,4,5,(6,7,8)]
del x[5] #将元组删除
print(x) #[1, 2, 3, 4, 5]
六.生成器推导式
1.特点
(1)()圆括号作定界符。
(2)结果是一个生成器对象(迭代器)。
(3)效率更高,空间占用非常少,适合大数据处理。
2.形式
除定界符不同外,与列表推导式相同
3.生成器对象的遍历
(1)使用生成器方法 next(),一次访问一个元素
x=(i for i in range(10))
print(x.__next__()) #0
print(x.__next__()) #1
print(x.__next__()) #2
(2)使用for循环进行遍历
x=(i for i in range(10))
for i in x:
print(i)
(3)转化为列表或元组进行遍历
注:不管哪种形式
- 一次生成,一轮访问;再次访问,再次生成
- 只能正向遍历
- 不支持用下标访问其元素,转化为列表和元组可以。