2010-02-17 79 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! 

在該示例中使用列表會產生錯誤「格式字符串沒有足夠的參數」,因爲列表被視爲一個參數。奇怪但真實。