1. 程式人生 > >Python中四種內建資料型別(list,tuple,set,dict)的區別

Python中四種內建資料型別(list,tuple,set,dict)的區別

List

    list是一種有序集合,能隨時新增或刪除其中的元素,元素型別可以不一樣,也可以定義一個空list
    構造list直接用[ ]將list的所有元素括起來,用逗號分割;通常把list賦值給一個變數,通過變數來引用list
    例子:L=[12, ‘China’, 19]
    在python中list是一個有序的集合所以在讀取list中的元素時必須按照嚴格的順序讀取,讀取list的資料使用 list名[ 位置 ],list中的位置從0開始,比如上面的L第一個元素就是L[0],第二個元素就是L[1]。
    在Python中list通過內建的函式append()方法新增資料到尾部,通過inster()方法新增資料到指定位置。

>>> L = [12, 'China', 19]
>>> L.append('Jack')
>>> print L
[12, 'China', 19, 'Jack']
>>> L.insert(1, 3.14)
>>> print L
[12, 3.14, 'China', 19, 'Jack']

    通過pop()刪除最後尾部元素,也可以指定一引數刪除指定位置:

>>> L.pop()
'Jack'
>>> print L
[12, 3.14, 'China', 19.998]
>>> L.pop(0)
12
>>> print L
[3.14, 'China', 19.998]

    也可以使用下標替換list中的資料

Tuple

    Tuple可以看做是一個“不變的”list列表,tuple中的資料一旦儲存就不可更改;構造tuple使用()將其所有元素羅列,元素之間也是使用的都好分割。

>>> t = (3.14, 'China', 'Jason')
>>> print t
(3.14, 'China', 'Jason')

    既然tuple的之不可變那麼它的作用是什麼呢?當你需要一個函式返回多個值時就可以使用tuple,當然tuple也是可變的;這裡的不可變值指的是tuple中的元素數量和位置不可變,但當其中的元素為一個list時tuple就變成了一個“可變的”

>>> t = (3.14, 'China', 'Jason', ['A', 'B'])
>>> print t
(3.14, 'China', 'Jason', ['A', 'B'])
>>> L = t[3]
>>> L[0] = 122
>>> L[1] = 233
>>> print t
(3.14, 'China', 'Jason', [122, 233])

Dict

    dict其實就是Key-Value鍵值對,類似於HashMap,可以用花括號{}通過類似於定義一個C語言的結構體那樣去定義它:

>>> d = {
    'Adam': 95,
    'Lisa': 85,
    'Bart': 59,
    'Paul': 75
}
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}

    可以通過len函式計算它的長度(List,tuple也可以):

>>> len(d)
4

    可以直接通過鍵值對方式新增dict中的元素:

>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}
>>> d['Jone'] = 99
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}

    list和tuple通過下標來訪問,而dict則通過key來訪問。而當key不存在時會儲存,建議使用get()方法:

>>> print d.get('Adam')
95
>>> print d.get('Jason')
None

    Dict具有一些特點:
    1.查詢速度快。無論是10個還是10萬個,速度都是一樣的,但是代價是耗費的記憶體大。List相反,佔用記憶體小,但是查詢速度慢。這就好比是陣列和連結串列的區別,陣列並不知道要開闢多少空間,所以往往開始就會開闢一個大空間,但是直接通過下標查詢速度快;而連結串列佔用的空間小,但是查詢的時候必須順序的遍歷導致速度很慢
    2.沒有順序。Dict是無順序的,而List是有序的集合,所以不能用Dict來儲存有序集合
    3.Key不可變,Value可變。一旦一個鍵值對加入dict後,它對應的key就不能再變了,但是Value是可以變化的。所以List不可以當做Dict的Key,但是可以作為Value
    4. Key不可重複。(下面例子中添加了一個’Jone’:0,但是實際上原來已經有’Jone’這個Key了,所以僅僅是改了原來的value)

Set

    set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。
    建立 set 的方式是呼叫 set() 並傳入一個 list,list的元素將作為set的元素:

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

    因為set不能包含重複的元素,所以,當我們傳入包含重複元素的時候回去掉重複的元素。
    由於set儲存的是無序集合,所以我們沒法通過索引來訪問。訪問 set中的某個元素實際上就是判斷一個元素是否在set中。

>>> s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
>>> 'Bart' in s
True
>>> 'Bill' in s
False
>>> 'bart' in s
False

    在set中是區分大小寫的,但有時候我們不需要區分大小寫這時候就要用到python的內建函式name.lower() ,使用name.lower() 可以不區分大小寫:

>>>s = set([name.lower() for name in['Adam', 'Lisa', 'Bart', 'Paul']])
>>>print 'adam' in s
True
>>>print 'bart' in s
True

    set的特點:
    set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快。
    set儲存的元素和dict的key類似,必須是不變物件,因此,任何可變物件是不能放入set中的。
    最後,set儲存的元素也是沒有順序的。
    set的增刪
    通過add和remove來新增、刪除元素(保持不重複),新增元素時,用set的add()方法:

>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])

刪除時用remove()方法:

>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])

注意:set新增元素時如果已經存在不會報錯但不會新增進資料;而在刪除時元素不存在會直接報錯