Python中的列表与元组情况

时间:2010-02-17 13:17:35

标签: python list tuples

是否存在使用列表导致错误的情况,您必须使用元组代替?

我对元组和列表的属性有所了解,但还不足以找到这个问题的答案。如果问题是另一种方式,那就是列表可以调整,但元组不会。

3 个答案:

答案 0 :(得分:14)

您可以将元组用作字典键,因为它们是不可变的,但您不能使用列表。例如:

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

答案 1 :(得分:9)

由于它们具有不可变性,元组(与列表不同)是hashable。这就是允许元组成为字典中的键以及集合成员的原因。严格来说,这是他们的可靠性,而不是他们的不变性。

因此,除了已经给出的字典键答案之外,还有一些适用于元组但不适用于列表的事情是:

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

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

答案 2 :(得分:3)

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

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

在该示例中使用列表会产生错误“格式字符串的参数不足”,因为列表被视为一个参数。奇怪但真实。