评论
由 Michael Galarnyk,数据科学家
元组是有序的项序列,就像列表一样。元组和列表的主要区别在于元组不可更改(不可变),而列表则可以(可变)。
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求
有两种方法可以初始化一个空元组。你可以通过使用 () 并且不包含任何值来初始化一个空元组。
# Way 1
emptyTuple = ()
你也可以通过使用 tuple
函数来初始化一个空元组。
# Way 2
emptyTuple = tuple()
含有值的元组可以通过用逗号分隔的值序列来初始化。
# way 1
z = (3, 7, 4, 2)# way 2 (tuples can also can be created without parenthesis)
z = 3, 7, 4, 2
你可以使用或不使用括号初始化元组。
重要的是要记住,如果你想创建一个只包含一个值的元组,你需要在项后面加上一个逗号。
# tuple with one value
tup1 = ('Michael',)# tuple with one value
tup2 = 'Michael',# This is a string, NOT a tuple.
notTuple = ('Michael')
你可以使用或不使用括号初始化元组。
元组中的每个值都有一个指定的索引值。重要的是要注意 Python 是零索引的语言。这意味着元组中的第一个值在索引 0 处。
# Initialize a tuple
z = (3, 7, 4, 2)*# Access the first item of a tuple at index 0*
print(z[0])
访问索引 0 处项的输出。
Python 还支持负索引。负索引从元组的末尾开始。使用负索引获取元组中的最后一项有时更方便,因为你不需要知道元组的长度来访问最后一项。
*# print last item in the tuple*
print(z[-1])
访问元组中最后一项的输出
提醒一下,你也可以使用正索引访问相同的项(如下所示)。
另一种访问元组 z 中最后一项的方法
切片操作返回一个包含所请求项的新元组。切片适用于获取元组中的子集。对于下面的示例代码,它将返回一个包含从索引 0 到不包括索引 2 的项的元组。
第一个索引是包含的(在 :
之前),最后一个(在 :
之后)则不包含
# Initialize a tuple
z = (3, 7, 4, 2)# first index is inclusive (before the :) and last (after the :) is not.
print(z[0:2])
元组的切片语法
*# everything up to but not including index 3*
print(z[:3])
所有到达但不包括索引 3 的项
你甚至可以使用负索引进行切片。
print(z[-4:-1])
元组是不可变的,这意味着在初始化元组后,无法更新元组中的单个项。如下面的代码所示,你不能更新或更改元组项的值(这与 Python 列表 的可变性不同)。
z = (3, 7, 4, 2)z[1] = "fish"
即使元组是不可变的,也可以取现有元组的部分来创建新的元组,如下例所示。
# Initialize tuple
tup1 = ('Python', 'SQL')# Initialize another Tuple
tup2 = ('R',)# Create new tuple based on existing tuples
new_tuple = tup1 + tup2;
print(new_tuple)
在开始本节之前,让我们先初始化一个元组。
# Initialize a tuple
animals = ('lama', 'sheep', 'lama', 48)
index 方法返回值出现的第一个索引。
print(animals.index('lama'))
count 方法返回元组中值出现的次数。
print(animals.count('lama'))
字符串‘lama’在元组 animals 中出现了两次
你可以通过使用 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))
enumerate
函数返回一个包含每次迭代的计数(从默认的 0 开始)和从序列中获得的值的元组:
friends = ('Steve', 'Rachel', 'Michael', 'Monica')
for index, friend in enumerate(friends):
print(index,friend)
本节的快速视频
列表和元组是标准的 Python 数据类型,用于以序列形式存储值。tuple
是 不可变的,而 list
是 可变的。以下是元组相对于列表的一些其他优点(部分来自 Stack Overflow)
- 元组比列表更快。 如果你定义了一组常量值,并且你唯一要做的就是迭代它,使用元组而不是列表。性能差异可以通过
timeit
库部分测量,该库允许你测量 Python 代码的执行时间。下面的代码运行每种方法 100 万次,并输出总共花费的时间(以秒为单位)。
import timeitprint(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))
- 一些元组可以作为字典的键(特别是那些包含不可变值如字符串、数字和其他元组的元组)。列表不能用作字典键,因为列表是可变的(你可以在这里了解字典)。
- 元组可以作为集合中的值,而列表不行(你可以在这里了解更多关于集合的内容)。
如果你对教程有任何问题或想法,可以在下方评论区或通过Twitter联系我。下一篇文章将回顾Python 字典及字典方法。如果你想了解如何使用 Pandas、Matplotlib 或 Seaborn 库,请考虑参加我的Python 数据可视化 LinkedIn 学习课程。这里是免费预览视频。
个人简介: Michael Galarnyk 是一名数据科学家和企业培训师。他目前在 Scripps 转化研究所工作。你可以在 Twitter (https://twitter.com/GalarnykMichael)、Medium (https://medium.com/@GalarnykMichael) 和 GitHub (https://github.com/mGalarnyk) 找到他。
原文。经授权转载。
相关:
-
Python 列表和列表操作
-
理解箱线图
-
应用于 Pandas DataFrame 的集合操作