1. 程式人生 > >python中list/tuple/dict/set的區別

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

代碼 方法 num super 三維 .get 浮點數 計算 keyword

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

1、list 列表

  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]

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

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

刪除:del list1[0]

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

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

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

嵌套:list裏面可以嵌套list從而形成類似於二維、三維、多維數組的東東,list1[1][2]/list1[2][3][3][5]……

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

2、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!‘,) * 4、3 in (1, 2, 3)、for x in (1, 2, 3): print x,

3、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

4、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]

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

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

   3、dict和set的key值不可變,唯一性

   4、set只有key沒有value

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

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

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

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