1. 程式人生 > >list與tuple,dict與set

list與tuple,dict與set

list

Python內建的一種資料型別是列表:list。list是一種有序的集合,可以隨時新增和刪除其中的元素。

直接用 [ ] 把list的所有元素都括起來,就是一個list物件。

 L = ['Adam', 'Lisa', 'Bart']

Python按照索引訪問list

>>> print L[0]
Adam

倒序訪問

>>> print L[-1]
Bart

新增新元素append()

>>> L = ['Adam', 'Lisa', 'Bart']
>>> L.append('Paul')
>>> print L
['Adam', 'Lisa', 'Bart', 'Paul']

方法是用list的 insert()方法,它接受兩個引數,第一個引數是索引號,第二個引數是待新增的新元素:

>>> L = ['Adam', 'Lisa', 'Bart']
>>> L.insert(0, 'Paul')
>>> print L
['Paul', 'Adam', 'Lisa', 'Bart']

L.insert(0, 'Paul') 的意思是,'Paul'將被新增到索引為 0 的位置上(也就是第一個),而原來索引為 0 的Adam同學,以及後面的所有同學,都自動向後移動一位。

如果Paul同學排在最後一個,我們可以用list的pop()

方法刪除:

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L.pop()
'Paul'
>>> print L
['Adam', 'Lisa', 'Bart']

pop()方法總是刪掉list的最後一個元素,並且它還返回這個元素,所以我們執行 L.pop() 後,會打印出 'Paul'。

如果Paul同學不是排在最後一個怎麼辦?比如Paul同學排在第三:

>>> L = ['Adam', 'Lisa', 'Paul', 'Bart']

要把Paul踢出list,我們就必須先定位Paul的位置。由於Paul的索引是2,因此,用 pop(2)

把Paul刪掉:

>>> L.pop(2)
'Paul'
>>> print L
['Adam', 'Lisa', 'Bart']

替換

直接用Paul把Bart給替換掉:

>>> L[2] = 'Paul'
>>> print L
L = ['Adam', 'Lisa', 'Paul']

對list中的某一個索引賦值,就可以直接用新的元素替換掉原來的元素,list包含的元素個數保持不變。

由於Bart還可以用 -1 做索引,因此,下面的程式碼也可以完成同樣的替換工作:

>>> L[-1] = 'Paul'

---------------------------------------------------------------------------------------------------------------------------

 

tuple

tuple是另一種有序的列表,中文翻譯為“ 元組 ”。tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了。

同樣是表示班裡同學的名稱,用tuple表示如下:

>>> t = ('Adam', 'Lisa', 'Bart')

建立tuple和建立list唯一不同之處是( )替代了[ ]

現在,這個 t 就不能改變了,tuple沒有 append()方法,也沒有insert()和pop()方法。所以,新同學沒法直接往 tuple 中新增,老同學想退出 tuple 也不行。

獲取 tuple 元素的方式和 list 是一模一樣的,我們可以正常使用 t[0],t[-1]等索引方式訪問元素,但是不能賦值成別的元素

 

包含 0 個元素的 tuple,也就是空tuple,直接用 ()表示:

>>> t = ()
>>> print t
()

 Python 規定,單元素 tuple 要多加一個逗號“,”,這樣就避免了歧義:

>>> t = (1,)
>>> print t
(1,)

Python之“可變”的tuple

前面我們看到了tuple一旦建立就不能修改。現在,我們來看一個“可變”的tuple:

>>> t = ('a', 'b', ['A', 'B'])

注意到 t 有 3 個元素:'a','b'和一個list:['A', 'B']。list作為一個整體是tuple的第3個元素。list物件可以通過 t[2] 拿到:

>>> L = t[2]

然後,我們把list的兩個元素改一改:

>>> L[0] = 'X'
>>> L[1] = 'Y'

再看看tuple的內容:

>>> print t
('a', 'b', ['X', 'Y'])

不是說tuple一旦定義後就不可變了嗎?怎麼現在又變了?

別急,我們先看看定義的時候tuple包含的3個元素:

當我們把list的元素'A'和'B'修改為'X'和'Y'後,tuple變為:

表面上看,tuple的元素確實變了,但其實變的不是 tuple 的元素,而是list的元素。

tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的!

理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。

-----------------------------------------------------------------------------------------------------------------

 dict 

d = {
    'Adam': 95,
    'Lisa': 85,
    'Bart': 59
}

我們把名字稱為key,對應的成績稱為value,dict就是通過 key來查詢 value

花括號 {} 表示這是一個dict,然後按照 key: value, 寫出來即可。最後一個 key: value 的逗號可以省略。

由於dict也是集合,len() 函式可以計算任意集合的大小:

>>> len(d)
3

dict的作用是建立一組 key 和一組 value 的對映關係,dict的key是不能重複的。

有的時候,我們只想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重複,這時,set就派上用場了。

---------------------------------------------------------------------------------------------------------------------------------------

set

set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。

建立 set 的方式是呼叫 set() 並傳入一個 list,list的元素將作為set的元素:

>>> s = set(['A', 'B', 'C'])

可以檢視 set 的內容:

>>> print s
set(['A', 'C', 'B'])

請注意,上述列印的形式類似 list, 但它不是 list,仔細看還可以發現,列印的順序和原始 list 的順序有可能是不同的,因為set內部儲存的元素是無序的。

因為set不能包含重複的元素,所以,當我們傳入包含重複元素的 list 會怎麼樣呢?

>>> s = set(['A', 'B', 'C', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> len(s)
3

結果顯示,set會自動去掉重複的元素,原來的list有4個元素,但set只有3個元素。