Python元组

来自CloudWiki
跳转至: 导航搜索

元组:轻量级列表

  • 列表的功能虽然很强大,但负担也很重,在很大程度上影响了运行效率。有时候我们并不需要那么多功能,很希望能有个轻量级的列表,元组(tuple)正是这样一种类型。
  • 从形式上,元组的所有元素放在一对圆括号中,元素之间使用逗号分隔,如果元组中只有一个元素则必须在最后增加一个逗号。

元组创建与元素访问

>>> x = (1, 2, 3)       #直接把元组赋值给一个变量
>>> type(x)             #使用type()函数查看变量类型
<class 'tuple'>
>>> x[0]                #元组支持使用下标访问特定位置的元素
1
>>> x[-1]               #最后一个元素,元组也支持双向索引
3
>>> x[1] = 4            #元组是不可变的
TypeError: 'tuple' object does not support item assignment
>>> x = (3)             #这和x = 3是一样的
>>> x
3
>>> x = (3,)            #如果元组中只有一个元素,必须在后面多写一个逗号
>>> x
(3,)
>>> x = ()             #空元组
>>> x = tuple()        #空元组
>>> tuple(range(5))    #将其他迭代对象转换为元组
(0, 1, 2, 3, 4)

  • 很多内置函数的返回值也是包含了若干元组的可迭代对象,例如enumerate()、zip()等等。
>>> list(enumerate(range(5)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
>>> list(zip(range(3), 'abcdefg'))
[(0, 'a'), (1, 'b'), (2, 'c')]

元组与列表的异同点

  • 列表和元组都属于有序序列,都支持使用双向索引访问其中的元素,以及使用count()方法统计指定元素的出现次数和index()方法获取指定元素的索引,len()、map()、filter()等大量内置函数和+、+=、in等运算符也都可以作用于列表和元组。
  • 元组属于不可变(immutable)序列,不可以直接修改元组中元素的值,也无法为元组增加或删除元素。
  • 元组没有提供append()、extend()和insert()等方法,无法向元组中添加元素;同样,元组也没有remove()和pop()方法,也不支持对元组元素进行del操作,不能从元组中删除元素,而只能使用del命令删除整个元组。
  • 元组也支持切片操作,但是只能通过切片来访问元组中的元素,而不允许使用切片来修改元组中元素的值,也不支持使用切片操作来为元组增加或删除元素。
  • Python的内部实现对元组做了大量优化,访问速度比列表更快。如果定义了一系列常量值,主要用途仅是对它们进行遍历或其他类似用途,而不需要对其元素进行任何修改,那么一般建议使用元组而不用列表。
  • 元组在内部实现上不允许修改其元素值,从而使得代码更加安全,例如调用函数时使用元组传递参数可以防止在函数中修改元组,而使用列表则很难保证这一点

元组和列表转换

list1= ['Google', 'Taobao', 'Runoob', 'Baidu']
tuple1=tuple(list1)
print(tuple1)
print(list(tuple1))