2008-09-03 54 views
36

我現在正在爲一個類學習Python,並且我們剛剛將元組作爲其中一種數據類型。我讀了維基百科頁面,但是,我無法弄清楚這種數據類型在實踐中會有用。我是否可以在Python中獲得一些例子,在那裏需要一組不變的數字?這與列表有何不同?什麼是有用的元組?

回答

44
  • 只要想要從函數返回多個結果就使用元組。
  • 由於它們是不可變的,它們可以用作字典的鍵(列表不能)。
+2

從小氣PL人稱視角:Python是混爲一談多這裏的東西;在靜態類型語言中,「元組」類型將包含固定數量的具有固定類型的子值的值進行匹配。 E.G.,(string * int),包含一個字符串和一個整數的元組類型。然而,在動態類型語言中,這種感覺似乎被淹沒了。不可變性的概念不是通常與元組相關聯的概念; python似乎已經選擇並重新使用'元組'這個術語。 – 2010-06-19 20:23:24

+0

元組也是由一些集合對象返回的,例如元組的知識是有用的枚舉() – Murphy 2016-04-01 20:34:57

2

當你總是將兩個或多個對象作爲一組處理時,我發現它們很有用。

1

一個列表總是可以替換一個元組,就功能而言(顯然除了作爲字典中的鍵)。但是,元組可以使事情變得更快。例如,對於Java中的不可變字符串也是如此 - 您何時需要無法更改字符串?決不!

我剛剛讀了一篇關於限制你爲了製作更好的程序而做些什麼的體面的討論; Why Why Functional Programming Matters Matters

18

當您需要將多個數據片段組合到您的密鑰中時,元組可以創建出好的字典密鑰,並且不想爲其創建類。

a = {} 
a[(1,2,"bob")] = "hello!" 
a[("Hello","en-US")] = "Hi There!" 

我已經使用此功能主要用於創建一個具有網格頂點座標的鍵字典。然而,在我的具體情況下,所涉及的花車的確切比較工作得很好,這可能並不總是適合您的目的[在這種情況下,我可能會將您的傳入花車轉換爲某種定點整數]

1

一個元組對於存儲多個值很有用。當你注意到一個元組就像一個不可變的列表 - 例如一旦創建,你不能添加/刪除/交換元素。

不可變的一個好處是,因爲元組的大小固定,它允許運行時執行某些優化。當在返回值或函數參數的上下文中使用tupple時,這是特別有利的。

2

元組和列表具有相同的用途。不變數據類型通常有很多好處,主要是關於併發問題。

所以,當你有一些本質上不易變的列表,並且你需要保證沒有消費者改變它時,你可以使用一個元組。

典型示例是諸如公司部門,類別等應用程序中的固定數據。如果此數據發生更改,通常由單個生產者重新構建元組。

8

我喜歡this explanation

基本上,當存在一個常量結構時(第一個位置始終保存一種類型的值和第二個值,等等),應該使用元組,列表應該用於同類值列表。

當然總是有例外,但這是一個很好的通用指南。

0

除了像字符串%操作和多個返回值那樣在語法上需要的位置外,我使用元組作爲輕量級類的一種形式。例如,假設您有一個對象將一個不透明的cookie從一個方法傳遞給調用方,然後傳遞給另一個方法。元組是將多個值打包到該cookie中的一種好方法,而不必定義一個單獨的類來包含它們。

儘管如此,我試圖對這種特殊用途進行審慎。如果cookie在整個代碼中被廣泛使用,最好創建一個類,因爲它有助於記錄它們的使用。如果它們只用於一個地方(例如一對方法),那麼我可能會使用一個元組。在任何情況下,因爲它是Python,所以你可以從一個元組開始,然後將其更改爲自定義類的實例,而無需更改調用方中的任何代碼。

0

元組是一系列值。這些值可以是任何類型,並且它們由整數索引,所以元組不像列表。最重要的區別在於元組是不可變的。

元組是一個逗號分隔值的列表:

t = 'p', 'q', 'r', 's', 't' 

這是很好的做法括元組括號:

t = ('p', 'q', 'r', 's', 't')