官术网_书友最值得收藏!

3.5 元組

元組也是序列的一種,它的兩端用“( )”表示,它與列表類似,不過列表為可變類型,而元組為不可變類型。簡單來說,即不可以直接修改元組的元素,因此,很多列表有的方法、操作,元組沒有。

如列表有sort方法,而元組沒有。因為sort方法修改了原序列,而元組不可修改,所以元組沒有sort方法。若想獲取元組最大或最小的幾個元素,最快的方法還是排序,雖不能直接用sort方法來排序,但可以通過sorted函數來獲取排序后的結果,源元組保持不變。例:

    >>> t = (19, 28, 20, 16, 26) 
    >>> t.sort ( ) 
    Traceback (most recent call last) :
      File "<pyshell#64>", line 1, in <module>
        t.sort ( ) 
    AttributeError: 'tuple' object has no attribute 'sort'
    >>> sorted (t) 
    [16, 19, 20, 26, 28]
    >>> t
     (19, 28, 20, 16, 26)

元組中的元素不能修改。若實際應用中確實要修改,可以通過切片及連接操作生成一個新的元組。例:

    >>> t = (1, 2, 3, 4) 
    >>> t [2]  = 30
    Traceback (most recent call last) :
      File "<pyshell#68>", line 1, in <module>
        t [2]  = 30
    TypeError: 'tuple' object does not support item assignment
    >>> t = t [:2]  + (30, )  + t [3:] 
    >>> t
     (1, 2, 30, 4)

因為元組是不可變類型,所以執行“t[2]=30”語句后報錯,而“t=t[:2]+(30,)+t[3:]”語句雖說可以使得t變為(1,2,30,4),但此操作是讓t指向一個新元組,而該新元組是由幾個元組連接而得的結果。下面給出的兩個例子,可以看出可變和不可變類型的區別。例:

    >>> L =  [1, 2, 3, 4] 
    >>> id (L) 
    52382728
    >>> L [2]  = 30
    >>> L
    [1, 2, 30, 4]
    >>> id (L) 
    52382728

id(object)返回object對象在內存中的地址,由操作前后L在內存中的地址可以看出這是同一個對象。它通過“L[2]=30”語句對列表L的元素進行了修改。再例:

    >>> t = (1, 2, 3, 4) 
    >>> id (t) 
    52491592
    >>> t = t [:2]  + (30, )  + t [3:]
    >>> t
     (1, 2, 30, 4)
    >>> id (t) 
    52474168

此例中,“t = t[:2]+ (30,)+ t[3:]”語句,并不是將原元組的元素進行了修改,從操作前后元組t在內存中的地址可以看出操作前后并不是同一個對象。也就是說,元組本身不可修改,因此通過切片及連接操作生成了新的元組對象賦值給了t。

上例中,“(30,)”表示僅含有一個元素30的元組,此處要注意的是,它跟列表不同,列表“[30]”表示僅含有一個元素30的列表。“(30)”表示數值30,為了避免沖突,因此若表示僅含有一個元素30的元組,則必須在30后增加一個英文逗號,此逗號不能省略。

主站蜘蛛池模板: 旌德县| 杂多县| 格尔木市| 淅川县| 文山县| 顺义区| 布尔津县| 正蓝旗| 东丰县| 扬州市| 资中县| 明溪县| 宣汉县| 西平县| 庆安县| 易门县| 建阳市| 水富县| 诸城市| 繁昌县| 玛沁县| 无棣县| 陈巴尔虎旗| 轮台县| 鹿邑县| 庐江县| 贡山| 伊春市| 襄垣县| 遂宁市| 威远县| 盐亭县| 彩票| 北安市| 石泉县| 泰来县| 陆丰市| 巧家县| 通河县| 西乌| 文化|