【译】全面深刻介绍Python中的元组

做者:Michael Galarnykbash

翻译:老齐微信

译者注: 本文适合初学者阅读。推荐与本文内容有关的数据:《Python大学实用教程》、《跟老齐学Python:轻松入门》(均为电子工业出版社出版)函数

元组是序列,就像列表同样。元组和列表的主要区别在于元组中的不能更改(即元组不可变),而列表能够更改(可变)。性能

建立元组

建立空元组有两种方法,能够经过使用不包含任何值的()来建立一个空元组。ui

# 方法1
emptyTuple = ()
复制代码

还可使用tuple函数建立一个空元组。spa

# 方法2
emptyTuple = tuple()
复制代码

带有元素的元组能够经过用逗号分隔的序列来建立。翻译

# 方法1
z = (3, 7, 4, 2)

# 方法2 (也能够不用圆括号建立元组)
z = 3, 7, 4, 2
复制代码

请务必记住,若是要建立只包含一个值的元组,则须要在元素的后面使用逗号。3d

# 只有一个值的元组
tup1 = ('Michael',)

# 只有一个值的元组
tup2 = 'Michael', 

# 这是字符串,不是元组
notTuple = ('Michael')
复制代码

访问元组中的值

元组中的每一个值都有一个指定的索引值。须要注意的是,Python是一种基于零索引的语言,这意味着元组中的第一个值的索引是0。code

# 建立一个元组
z = (3, 7, 4, 2)

# 根据索引0获得第一个元素
print(z[0])
复制代码

Python还支持负索引。负索引从元组的末尾开始,有时使用负索引来获取元组中的最后一项会更方便,由于你没必要知道元组的长度就能够访问最后一项。orm

# 打印元组的最后一项
print(z[-1])
复制代码

提示一下,你还可使用正索引访问相同的项(以下所示)。

元组切片

切片操做返回包含请求项的新元组,从而获得元组中元素的子集。对于下面的示例代码,它将返回一个元组,其中包含从索引0到索引2(不包括索引2)的项。

# 建立元组
z = (3, 7, 4, 2)

# 切片包含冒号前面的第一索引,不包含冒号后面的索引
print(z[0:2])
复制代码

# 从第一个开始,但不包含索引3项
print(z[:3])
复制代码

你甚至能够制做索引为负的切片。

print(z[-4:-1])
复制代码

元组是不可变的

元组是不可变的,这意味着在建立元组以后,没法更新元组中的某个元素。正以下面的代码所示,你不能更新或更改元组项的值(这不一样于Python列表,由于Python列表是可变的)。

z = (3, 7, 4, 2)
z[1] = "fish"
复制代码

即便元组是不可变的,也能够采用现有元组的一部分来建立新元组,以下面的示例所示。

# 建立元组
tup1 = ('Python', 'SQL')

# 建立另一个元组
tup2 = ('R',)

# 在已有元组基础上建立一个新元组
new_tuple = tup1 + tup2;
print(new_tuple)
复制代码

元组的方法

在开始本节以前,先建立一个元组。

# 建立元组
animals = ('lama', 'sheep', 'lama', 48)
复制代码

index方法

index方法返回在元组中查询到的第一个值的索引。

print(animals.index('lama'))
复制代码

count方法

count方法返回一个值在元组中出现的次数。

print(animals.count('lama'))
复制代码

遍历元组

可使用for循环遍历元组的项。

for item in ('lama', 'sheep', 'lama', 48):
   print(item)
复制代码

元组解包

元组对于序列解包颇有用。

x, y = (7, 10);
print("Value of x is {}, the value of y is {}.".format(x, y))
复制代码

枚举

枚举函数返回一个元组,该元组包含每次迭代的计数(从开始时默认为0)和在序列上迭代得到的值:

friends = ('Steve', 'Rachel', 'Michael', 'Monica')
for index, friend in enumerate(friends):
    print(index,friend)
复制代码

元组相对于列表的优势

下面的视频内容很详细地介绍了元组和列表的区别,请观看:

(视频课程)

列表和元组是按序列存储值的内置Python数据类型。元组是不可变的,而列表是可变的。与列表相比,元组还有其余一些优势(部分来自堆栈溢出)

  • 元组比列表快。若是要定义一个恒定的数值集合,而且你所要作的只是遍历它,请使用元组而不是列表。使用timeit能够测量性能差别,该模块容许你对Python代码计时。下面的代码为每种方法执行100万次,并输出以秒为单位的总时间。
import timeit 
print(timeit.timeit('x=(1,2,3,4,5,6,7,8,9,10,11,12)', number=1000000))

print(timeit.timeit('x=[1,2,3,4,5,6,7,8,9,10,11,12]', number=1000000))
复制代码

  • 元组能够用做字典键(特别是包含不可变值的元组,如字符串、数字和其余元组)。列表永远不能用做字典键,由于列表是可变的。

  • 元组能够用做集合中的值,而列表不能。

关注微信公众号:老齐教室。读深度文章,得精湛技艺,享绚丽人生。

相关文章
相关标签/搜索