我們看到列表和字串有很多共同特性,例如索引和切片操作。他們是 序列 資料型別(參見 序列型別 --- list, tuple, range)中的兩種。隨著 python 語言的發展,其他的序列型別也會被加入其中。這裡介紹另一種標準序列型別: 元組。
乙個元組由幾個被逗號隔開的值組成,例如
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # tuples are immutable:
... t[0] = 88888
traceback (most recent call last):
file "", line 1, in typeerror: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])
如你所見,元組在輸出時總是被圓括號包圍的,以便正確表示巢狀元組。輸入時圓括號可有可無,不過經常會是必須的(如果這個元組是乙個更大的表示式的一部分)。給元組中的乙個單獨的元素賦值是不允許的,當然你可以建立包含可變物件的元組,例如列表。
雖然python元組可能看起來與列表很像,但它們通常是在不同的場景被使用,並且有著不同的用途。元組是 immutable (不可變的),其序列通常包含不同種類的元素,並且通過解包(這一節下面會解釋)或者索引來訪問(如果是 namedtuples 的話甚至還可以通過屬性訪問)。列表是 mutable (可變的),並且列表中的元素一般是同種型別的,並且通過迭代訪問。
乙個特殊的問題是構造包含0個或1個元素的元組:為了適應這種情況,語法有一些額外的改變。空元組可以直接被一對空圓括號建立,含有乙個元素的元組可以通過在這個元素後新增乙個逗號來構建(圓括號裡只有乙個值的話不夠明確)。醜陋,但是有效。例如
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0>>> len(singleton)
1>>> singleton
('hello',)
語句 t = 12345, 54321, 'hello!' 是 元組打包 的乙個例子:值 12345, 54321 和 'hello!' 被打包進元組。其逆操作也是允許的
這被稱為 序列解包 也是很恰當的,因為解包操作的等號右側可以是任何序列。序列解包要求等號左側的變數數與右側序列裡所含的元素數相同。注意python可變引數其實也只是元組打包和序列解包的組合。
Python序列之列表和元組
列表的各個元素以逗號分隔,寫在方括號中。lst 1,2,3,4 list函式可以用於將所有型別的列表轉化為列表 list其實是一種型別,相當於型別轉換 list hello h e l l o 而 join somelist 可以將乙個由字元組成的序列轉換為字串。因為字串不能被修改,所以可以用lis...
Python序列之元組
元組屬於python序列中的一種,是一種容器型別,它可以是任意物件的有序集合,不可變物件,長度固定,支援巢狀 異構 建立元組和簡單,只需要將元素用括號 可選 括起來,並使用逗號分隔符 即使只有乙個元素 來分隔元素即可 一 生成乙個元組 t1 1,2,3,4,5 print t1 1,2,3,4,5 ...
Python學習筆記 元組,序列
1.1 元組 tuple 戴上了枷鎖的列表 1.1.1 建立和訪問乙個元組 1 建立列表是使用 建立元組大部分使用 2 訪問方式一樣 3 切片拷貝一樣 4 列表裡的元素隨意更改 元組裡的元素不可更改 5 如果建立只有乙個元素的元組,需要在元素後面加上逗號,否則是乙個普通的元素 例如 8 8 與 8 ...