python中list/tuple/dict/set的區別

  序列是Python中最基本的數據結構。序列中的每一個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。Python有6個序列的內置類型,但最多見的是列表list和元組tuple。序列均可以進行的操做包括索引,切片,加,乘,檢查成員。此外,Python已經內置肯定序列的長度以及肯定最大和最小的元素的方法。列表是最經常使用的Python數據類型,它能夠做爲一個方括號內的逗號分隔值出現。列表的數據項不須要具備相同的類型,建立一個列表,只要把逗號分隔的不一樣的數據項使用方括號括起來便可。html

一、list 列表python

  python內置的數據類型,有序集合,隨時增刪。包含的數據類型能夠不一樣:整數、浮點數、字符串、list、tuple、dict、set、bool、空值、常量算法

list1=[1.2, 2.1, 3, 3.2, 5, 'a', (2, 2, 3), [1.2, 2], {1: 2, 2: 3}, set([2, 3, 2.2]), 3.14, None]sql

空的列表:list1=[]; list2=list()數組

函數:len()、append()、remove()移除列表中某個值的第一個匹配項、insert()、pop()、sort()、del、list()、reverse()、index()從列表中找出某個值第一個匹配項的索引位置、count()統計某個元素在列表中出現的次數、extend()在列表末尾一次性追加另外一個序列中的多個值(用新列表擴展原來的列表)安全

刪除:del list1[0]數據結構

元祖轉換爲列表:tuple-->list  list(tuple)app

append(value)把元素添加到末尾、insert(i,value)把元素添加到任意位置;pop()刪除末尾元素、pop(i)刪除指定位置的元素、remove(value)直接刪除某個元素值;list1.sort()對元素進行排序ide

取值:list1[0]、list1[4:]、list1[:-4]、list1[2:-3]函數

嵌套:list裏面能夠嵌套list從而造成相似於二維、三維、多維數組的東東,list1[1][2]/list1[2][3][3][5]……

修改:修改某個位置元素的值 list1[i]=value

二、tuple 元祖

  python內置的數據類型,有序列表,一旦初始化,沒法修改。tuple不可變,因此代碼更安全。包含的數據類型能夠不一樣:整數、浮點數、字符串、list、tuple、dict、set、bool、空值、常量

空的元祖:tuple1=(); tuple2=tuple()

函數:len()、del 刪除整個元祖、tuple()把列表轉換爲元祖/append()、remove()、insert()、pop()、sort()

取值:tuple1[0]、tuple1[-1]、tuple1[3:]、tuple1[:-1]、tuple1[2:-2]

表示:空的tuple1=();一個元素tuple1=(2,)後面跟着一個逗號

雖然tuple不可變,可是它裏面的list、dict、set是能夠變的

建立:tup1 = ('physics', 'chemistry', 1997, 2000); tup2 = (1, 2, 3, 4, 5 ); tup3 = "a", "b", "c", "d";

運算符:(1, 2, 3) + (4, 5, 6)、('Hi!',) * 四、3 in (1, 2, 3)、for x in (1, 2, 3): print x,

三、dict 詞典  d={'Michael': 95, 'Bob': 75, 'Tracy': 85}

python內置,鍵值對(key-value)方式存儲,查找速度快;dict的key必須是不可變對象(字符串、數字、元祖);value包含的數據類型能夠不一樣:整數、浮點數、字符串、list、tuple、dict、set、bool、空值、常量

空的詞典:dict1={}; dict2=dict()

函數:len()、get()、pop()、del、has_key()、items()、keys()、values()、update()、append()、remove()、insert()、sort()

取值:d['Michael']

賦值:d['Michael']=100

添加:d['Jim']=22

刪除:pop('Tracy'); del d['Jim'];del d

判斷key是否存在:'Tracy' in d; d.get('Tracy')若是key不存在,返回None; d.get('Tracy', value) 若是key不存在,返回本身指定的value

 

和list比較,dict有如下幾個特色:

  1. 查找和插入的速度極快,不會隨着key的增長而增長;
  2. 須要佔用大量的內存,內存浪費多。

而list相反:

  1. 查找和插入的時間隨着元素的增長而增長;
  2. 佔用空間小,浪費內存不多。

因此,dict是用空間來換取時間的一種方法。

dict能夠用在須要高速查找的不少地方,在Python代碼中幾乎無處不在,正確使用dict很是重要,須要牢記的第一條就是dict的key必須是不可變對象

這是由於dict根據key來計算value的存儲位置,若是每次計算相同的key得出的結果不一樣,那dict內部就徹底混亂了。這個經過key計算位置的算法稱爲哈希算法(Hash)。

要保證hash的正確性,做爲key的對象就不能變。在Python中,字符串、整數等都是不可變的,所以,能夠放心地做爲key。而list是可變的,就不能做爲key

四、set 無序集合、key不重複

無索引、無切片、做爲一個無序的集合,set不記錄元素位置或者插入點。所以,set不支持 indexing, slicing, 或其它類序列(sequence-like)的操做

set和dict相似,也是一組key的集合,但不存儲value。因爲key不能重複,因此,在set中,沒有重複的key。

要建立一個set,須要提供一個list做爲輸入集合:

 s = set([1, 2, 3]):set([1,2,3])

 s = set('boy') : set(['b','o','y'])

 s = set(('cmd','pid')) :set(['cmd','pid'])

 s = {'txt', 'png', 'jpg', 'xls', 'csv', 'zip', 'xlsx', 'gif', 'GIF'}

空的的集合:  set1 = set();

函數:pop()、add()、remove()、update()、len()、clear()、discard()、append()、insert()、sort()

添加:add(key)、update();區別 s.add('boy'):set(['boy',1,2,3]);s.update('boy'):set(['boy','b',1,2,3,'o','y']);s.update([23,22,32])添加多項

刪除:remove(key)刪除指定位置的元素,若是不存在,引起KeyError;pop()刪除而且返回集合「s」中的一個不肯定的元素, 若是爲空則引起 KeyError;clear()刪除全部元素;s.discard(x),若是在 set 「s」中存在元素 x, 則刪除

交集:set1 & set2 (set1.intersection(set2))兩個set的共有元素

並集: set1 | set2 (set1.union(set2))兩個set的元素相加後去重

差集:set1 - set2 (set1.difference(set2)) 集合set1去除和和集合set2相同的部分

對稱差集:set1^set2 (set1.symmetric_difference(set2))項在set1或set2中,但不會同時出如今兩者中

操做:key in set1; key not in set1 ;for key in set1;

   set1.issubset(set2)等價於set1<=set2 : 測試set1中的每個元素是否都在set2中

   set1.issuperset(set2)等價於set1>=set2 : 測試set2中的每個元素是否都在set1中 

   s.copy()  返回 set 「s」的一個淺複製  

set和dict的惟一區別僅在於沒有存儲對應的value,可是,set的原理和dict同樣,因此,一樣不能夠放入可變對象,由於沒法判斷兩個可變對象是否相等,也就沒法保證set內部「不會有重複元素」。試試把list放入set,看看是否會報錯

重複元素在set中自動被過濾

應用示例:怎麼去除海量列表裏重複元素:

a = [11,22,33,44,11,22] 

a = list(set(a)) :  [33, 11, 44, 22] 

 

總結:一、list、tuple是有序列表;dict、set是無序列表

     二、list元素可變、tuple元素不可變

     三、dict和set的key值不可變,惟一性

     四、set只有key沒有value

     五、set的用途:去重、並集、交集等

     六、list、tuple:+、*、索引、切片、檢查成員等

   七、dict查詢效率高,可是消耗內存多;list、tuple查詢效率低、可是消耗內存少

 

參考:一、http://www.runoob.com/python/python-dictionary.html

     二、http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868193482529754158abf734c00bba97c87f89a263b000

相關文章
相關標籤/搜索