python - style - seaborn




Python:(1,2,3)和[1,2,3]之間有什麼區別,我應該什麼時候使用它們? (9)

Python FAQ

列表和元組雖然在許多方面都相似,但通常以完全不同的方式使用。 元組可以被認為與Pascal記錄或C結構類似; 它們是相關數據的小型集合,可能是不同類型的,它們作為一個組進行操作。 例如,笛卡兒坐標適當地表示為兩個或三個數字的元組。

另一方面,列表更像是其他語言的數組。 他們傾向於持有不同數量的對象,所有這些對像都是相同的類型,並且一個接一個地操作。

一般來說,按照慣例,你不會選擇一個基於其(im)可變性的列表或元組。 你會選擇一個元組的完全不同的數據,其中一個成熟的類將是太重量級的小數據集合,並為任何合理的大小,如果你有一個同質的數據集收集列表。

在許多地方, (1,2,3)[1,2,3]可以互換使用。

我應該什麼時候使用這個或那個,為什麼?


元組是創建複合數據類型的一種快速\靈活的方法。 列表是對象列表的容器。

例如,您將使用一個List來存儲一個班級中的學生詳細信息列表。

該列表中的每個學生的詳細信息可以是包含他們的捲號,姓名和考試分數的三元組。

 `[(1,'Mark',86),(2,'John',34)...]`

而且,因為元組是不可變的,所以它們可以在字典中用作鍵。


正如其他人所說,列表和元組都是可以用來存儲python對象的容器。 列表是可擴展的,其內容可以通過賦值來改變,另一方面,元組是不可變的。

此外,列表不能用作字典中的鍵,而元組可以。


元組的概念具有高度的表達性:

  • 實際上,它們非常適合打包和解包值( x,y=coord )。

  • 結合字典(散列表),它們允許映射的形式,否則將需要多層次的關聯。 例如,考慮標記(x,y)已被找到。

    // PHP
    if (!isset($found[$x])) {
        $found[$x] = Array();
        $found[$x][$y] = true;
    } else if (!isset($found[$x][$y])) {
        $found[$x][$y] = true;
    }
    
    # Python
    found[(x,y)] = True # parens added for clarity
  • 應該使用列表,期望對其內容進行操作(因此提到了不變性的各種提法)。 一個會想彈出,推,拼接,切片,搜索,插入之前,插入之後,等一個列表。

  • 元組應該是一個對象的低級表示,在這個對像中進行簡單的比較,或者以可預測的方式提取第n個元素或n個元素,比如前面給出的坐標例子。

  • 最後,列表不可散列,所以用字典(Perl中的哈希表,PHP中的關聯數組)的映射類型必須用元組完成。

    下面是一個元組和詞典的簡單例子,最後一起:

    """
    couple is a tuple of two people
    doesLike is a dictionary mapping couples to True or False
    """
    couple = "john", "jane"
    doesLike = dict()
    doesLike[couple] = True
    doesLike["jane", "john"] = False # unrequited love :'(

[1,2,3]是可以添加或刪除項目的列表。
(1,2,3)是一個定義了的元組,不能修改。


列表[1,2,3]是動態的和靈活的,但是靈活性以速度成本。

元組(1,2,3)是固定的(不可變的),因此速度更快。


打開一個控制台並運行python。 嘗試這個:

  >>> list = [1, 2, 3]     
  >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
     '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

你可能會看到最後一行的最後一行有'append','count','extend','index','insert','pop','remove','reverse','sort “

現在嘗試相同的元組:

>>> tuple = (1, 2, 3)
>>> dir(tuple)
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

這裡只顯示列表方法中的“count”和“index”

這是因為元組是不可變的,他們不支持任何修改。 相反,他們在內部執行上更簡單快捷。


(1,2,3)是一個元組,而[1,2,3]是一個列表。 元組是一個不可變的對象,而列表是可變的。


  • 元組可能代表字典中的一個鍵,因為它是不可變的。
  • 如果您有一組不需要隨機訪問的數據,請使用列表。




tuples