2010-02-17 76 views
8

是否存在使用列表导致错误并且您必须使用元组来替代的情况?Python中的列表与元组情况

我知道一些关于元组和列表的属性,但还不足以找出这个问题的答案。如果问题是相反的,那么列表可以调整,但元组不会。

+0

可能的重复http://stackoverflow.com/questions/1983/python-what-is-the-difference-between-1-2-3-and-1-2-3-and-when-should-我使用 – outis 2010-04-19 23:44:04

回答

14

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

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

感谢您的回答!这样我越来越多地认识Python .. – Alphonse 2010-02-17 13:34:37

+0

同样,集合是可变的,但frozensets不是。所以如果你需要一套作为一个关键,你必须将其转换为一个冷冻集。 – FogleBird 2010-02-18 14:16:38

9

由于它们不可变的性质,元组(不像列表)元组是hashable。这就是允许元组成为词典中的键和集合的成员的元素。严格地说,这是他们的可替代性,而不是他们的不变性。

所以除了已经给出的字典键接听,一对夫妇的其他东西,将元组工作,但没有列表是:

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

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

字符串格式化元组是强制性的:

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

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