Theory: Tuple(理论:元组)

到目前为止,您肯定知道如何处理列表,这是 Python 中最流行的集合。现在让我们发现一个同样有用的数据类型——元组。您应该记住,它们几乎与列表相同。使它们与众不同的是它们的不变性

定义一个元组

由于元组无法更改,因此创建元组类似于打开一个固定大小的盒子,然后将几个值放入该盒子并密封。一旦盒子被密封,您就不能修改它的大小或内容。

使用一对括号来定义一个元组:

empty_tuple = ()
print(type(empty_tuple))  # <class 'tuple'>

空元组很容易创建。那么下面的例子出了什么问题呢?

not_a_tuple = ('cat')
print(not_a_tuple)        # 'cat'
print(type(not_a_tuple))  # <class 'str'>

如您所见,我们创建的变量存储了一个字符串。实际上组成元组需要一个逗号,而不是括号。让我们修复这段代码:

now_a_tuple = ('cat',)
print(now_a_tuple)        # ('cat',)
print(type(now_a_tuple))  # <class 'tuple'>

因此,在定义单例元组时始终使用逗号。事实上,即使你的元组包含多个元素,用逗号分隔项目就足够了:

weekend = 'Saturday', 'Sunday'
print(weekend)        # ('Saturday', 'Sunday')
print(type(weekend))  # <class 'tuple'>

内置函数tuple()将字符串、列表和其他可迭代对象转换为元组。使用此函数,您也可以创建一个空元组。

# another empty tuple
empty_tuple = tuple()
print(empty_tuple)        # ()
print(type(empty_tuple))  # <class 'tuple'>

# a list turned into a tuple
bakers_dozen = tuple([12, 1])
print(bakers_dozen == (12, 1))  # True

# a tuple from a string
sound = tuple('meow')
print(sound)  # ('m', 'e', 'o', 'w')

我们可以用元组做什么?

首先,让我们检查一下列表和元组的共同特征。

列表和元组都是有序的,也就是说,当将元素传递给这些容器时,您可以预期它们的顺序将保持不变。元组对存储在其中的数据的性质也无动于衷,因此您可以重复值混合不同的数据类型

tiny_tuple = (0, 1, 0, 'panda', 'sloth')

print(len(tiny_tuple))  # 5
print(tiny_tuple)       # (0, 1, 0, 'panda', 'sloth')

就像列表一样,元组支持索引。不过要小心索引,如果你想在没有IndexErrors.

empty_tuple = ()
print(empty_tuple[0])  # IndexError

numbers = (0, 1, 2)
print(numbers[0])   # 0
print(numbers[1])   # 1
print(numbers[2])   # 2
print(numbers[3])   # IndexError

元组的第一个显着特征在这里发挥作用。他们不支持的是item assignment。虽然您可以通过索引更改列表中引用此元素的元素,但元组并非如此:

# ex-capitals
capitals = ['Philadelphia', 'Rio de Janeiro', 'Saint Petersburg']

capitals[0] = 'Washington, D.C.'
capitals[1] = 'Brasília'
capitals[2] = 'Moscow'
print(capitals)  # ['Washington, D.C.', 'Brasília', 'Moscow']

former_capitals = tuple(capitals)
former_capitals[0] = 'Washington, D.C.'  # TypeError

在上面的示例中,我们尝试更新元组,但结果并不好。您不能将项目添加到元组或从那里删除(除非您删除整个元组)。然而,不变性有积极的一面。我们将在下一节讨论它。

不变性及其优点

这时候,你可能会想到一个问题:当我们有列表时为什么要使用元组?可以预见的是,所有答案都有助于不变性。让我们详细谈谈它的好处:

  • 元组比列表更快内存效率更高。每当您需要处理大量数据时,都应该考虑一下。如果您不打算修改数据,也许您应该决定使用元组。
  • 元组可以用作字典键,而作为键的列表将导致TypeError.
  • 最后但同样重要的是,不可能意外更改存储在元组中的数据。对于某些任务,它可能被证明是一种安全而强大的解决方案。

概括

这些是 Python 中元组的基础知识。就像列表一样,元组是有序可迭代的。与列表不同,它们是不可变的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值