元组

95 阅读3分钟

前言:

元组是轻量级的列表,虽然列表功能很强大,但是负担也很重,效率不高,有时不需要这么多功能,列表应运而生。

一.形式

(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)转化为列表或元组进行遍历
:不管哪种形式

  • 一次生成,一轮访问;再次访问,再次生成
  • 只能正向遍历
  • 不支持用下标访问其元素,转化为列表和元组可以。