Python中的列表与元组问题

9 投票
3 回答
697 浏览
提问于 2025-04-15 19:23

有没有一种情况是用列表会出错,而必须用元组来代替呢?

我对元组和列表的特点有点了解,但还不够深入,无法找到这个问题的答案。如果问题反过来问,那就是列表可以调整,而元组不可以。

3 个回答

4

字符串格式化中,元组是必须的:

"You have %s new %s" % ('5', 'mails') # must be a tuple, not a list!

在这个例子中,如果使用列表,就会出现“格式字符串的参数不够”的错误,因为列表被当作一个参数来看待。这听起来有点奇怪,但确实是这样。

10

因为元组是不可变的(和列表不一样),所以它们是可以被“哈希”的。这意味着元组可以用作字典中的键,也可以作为集合的成员。严格来说,是它们的哈希特性,而不是不可变性更重要。

除了之前提到的字典键的答案,还有一些其他的特性是元组可以使用,但列表不行:

>>> hash((1, 2))
3713081631934410656

>>> set([(1, 2), (2, 3, 4), (1, 2)])
set([(1, 2), (2, 3, 4)])
15

你可以把元组当作字典的键,因为元组是不可改变的,但列表就不行。比如:

d = {(1, 2): 'a', (3, 8, 1): 'b'}  # Valid.
d = {[1, 2]: 'a', [3, 8, 1]: 'b'}  # Error.

撰写回答