Python Day2 數據類型: 列表元組和字典




列表(List)


列表是指一組有序的數據集合,可以將各種各樣的數據有序的存放在列表 中,並且可以對其進行增刪改查,以及遍歷。列表的存在是爲了通過一個變量存 儲更多的信息 








通過 len()內置函數可查看列表中元素的個數







>>> len(list)







你可以通過索引來找到列表中每個元素的位置,記住索引是從 0 開始的 







>>> shopping_list[2] #Bike

>>> shopping_list[0] #第一個元素取出來
>>> shopping_list[-1] #-1
代表取列表中最後一個元素'Gift'
>>> shopping_list[-3] #
取倒數第3位元素'Clothes'
>>> shopping_list[-4] #
取倒數第4個元素




切片(Slice)


你還可以從列表中取出指定多個元素,這種操作叫做切片





>>> shopping_list[0:3] #0到第3個元素,不包括第4
>>> shopping_list[:3] #
同上,取0到第3個元素,不包括第4個,0可以不寫
>>> shopping_list[2:5] #
取第3至第5個元素
>>> shopping_list[:-3] #
取從0至倒數第3個元素
>>> shopping_list[-3:] #
取最後3個元素
>>> shopping_list[1:8:2] #
18隔一個取一個,後面的2是步長,即每隔幾個元素取一個
>>> shopping_list[::2] #
從頭到位每隔一個取一個







增刪改查 







>>> shopping_list.append('MovieTicket') #向列表後面追加一個元素
>>> shopping_list.pop() #
刪除最後一個元素
>>> shopping_list.remove('Mac') #
刪除叫’Mac’的元素,如果有多個’Mac’,那會刪除從左邊數找到的第一 個
>>> shopping_list[2] = 'COFFEE' #
將索引爲2的元素改爲”COFFEE”,原來是小寫
>>> shopping_list.insert(3,"Toy") #插入一個新元素,索引爲3




>>> shopping_list.index('Toy') #返回’Toy’元素的索引值,如果有多個相同元素,則返回匹配的第一個
>>> shopping_list.append('Food')
>>> shopping_list.count('Food') #
統計’Food’的元素的個數,剛添加了一個,所以現在是2
>>> list2= ['Banana','Apple'] #
創建一個新列表
>>> shopping_list.extend(list2) #把上面的新列表合併到shopping_list
>>> shopping_list.sort() #
將列表排序
>>> shopping_list.reverse() #
將列表反轉
>>> del shopping_list[3:8] #
刪除索引38的元素,不包括8
>>> for i in shopping_list: #
遍歷列表
... print i 



元組(Tuple)

另一種有序列表叫元組:tupletuple list 非常類似,但是 tuple 一旦初始化就不能修改, 比如同樣是列出同學的名字 

>>> classmates = ('Michael', 'Bob', 'Tracy') 

只有1個元素的tuple定義時必須加一個逗號 ,來消除歧義: 

>>>> t = (1,)



字典(Dict)

列表允許你通過一個變量存儲大量的信息,但試想以下場景,用列表實現就可能 效率較低了:

  1. 存儲的信息量越來越多,有的時候找一個數據可能要循環整個列表,耗時較

    長。

  2. 單個元素包含的信息量變多時,比如,之前只是存儲姓名列表,現在是要存

     儲姓名、年齡、身份證號、地址、工作等這個人的很多信息,用列表去存儲

    很費勁

  3. 要求存儲的數據是不重複,我們知道列表是允許的重複值的,當然想存儲時

      就讓我的數據默認就是唯一的話,用列表就不可以了

以上這些是列表不擅長的地方,卻恰恰是我們接下來要講的 dict 所擅長的方面,dict 使用 key-value 的形式存儲數據,dict key 是唯一的,所以你可以通過 key來唯一的定位到你的數據。之所以叫字典(在其它語言中稱爲 map),是因爲 dict的數據結構跟我們生活中用的字典是一樣的,查英文字典時,輸入單詞,就可以 定位到這個單詞意思的詳細解釋,其中這個單詞就是 key,對應的詞義解釋就是value.字典有如下特點:

  1. key-value 格式,key 是唯一的

  2. 無序,與列表有序的特點不同,字典是無序的,列表只所以有序是因爲你需

    要通過索引來定位相應元素,而字典已經可以通過 key 來定位相應 value,因 此爲了避免浪費存儲空間,字典不會對數據的位置進行紀錄,當然如果你想 讓其變成有序的,也是有方法的,這個我們以後再講。

  3. 查詢速度很快,dict是基於hash表的原理實現的,是根據關鍵字(Keyvalue) 而直接訪問在內存存儲位置的數據結構。也就是說,它通過把鍵值通過一個 函數的計算,映射到表中一個位置來訪問記錄,這加快了查找速度。這個映 射函數稱做散列函數,存放記錄的數組稱做散列表。由於通過一個 key 的索 引表就直接定位到了內存地址,所以查詢一個只有 100 條數據的字典和一個100 萬條數據的字典的速度是查不多


好了,來看看 dict 的語法:>>> info = {'name':'alex',

'job':'engineer', 'age': 29, 'company':'AUTOHOME'

} >>> info

{'age': 29, 'job': 'engineer', 'company': 'AUTOHOME', 'name': 'alex'}

增刪改查

>>> info['name'] #查看key’name’value
"alex"
>>> info['job'] = 'Boss' #
key value 改爲’Boss’
>>> info
{'age': 29, 'job': 'Boss', 'company': 'AUTOHOME', 'name': 'alex'}
>>> info['city'] = 'BJ' #
如果dict中有key’city’,就將其值改爲’BJ’,如果沒有這個key,就創建一條新 紀錄
>>> info
{'age': 29, 'job': 'Boss', 'company': 'AUTOHOME', 'name': 'alex', 'city': 'BJ'}
>>> info.pop('age') #
刪除key’age’的數據,跟del info[‘age’] 一樣
29
>>> info
{'job': 'Boss', 'company': 'AUTOHOME', 'name': 'alex', 'city': 'BJ'}
>>> info.popitem() #
隨機刪除一條數據,dict爲空時用此語法會報錯

('job', 'Boss')
>>> info.items() #
dictkey,value轉換成列表的形式顯示
[('company', 'AUTOHOME'), ('name', 'alex'), ('city', 'BJ')]
>>> info.has_key('name') #
判斷字典中是否有個叫’name’key
True
>>> info['age'] #
查找一個不存在的key報錯,因爲’age’剛纔已經刪除了,所以報錯Traceback (most recent call last):

File "<stdin>", line 1, in <module>
KeyError: 'age'
>>> info.get('age') #
查找key,如果存在則返回其value,否則則返回None
>>> info.get('name')
'alex'
>>> info.clear() #
清空dict
>>> info
{}
>>> info.fromkeys(['a','b','c'],'Test') #
根據列表[‘a’,’b’,’c’]來創建dict裏的key,後面 的’Test’是默認value,如果不指定的話則爲None
{'a': 'Test', 'c': 'Test', 'b': 'Test'}
>>> info
{}
>>> info =info.fromkeys(['a','b','c'],'Test')
>>> info
{'a': 'Test', 'c': 'Test', 'b': 'Test'}
>>> info.setdefault('d','Alex') #
找一個key’d’的紀錄,如果這個key不存在,那就創建一個叫’d’key,並且將其value設置爲’Alex’, 如果這個key存在,就直接返回這個keyvalue,見下一條
'Alex'
>>> info.setdefault('c','Alex')
'Test'
>>> info
{'a': 'Test', 'c': 'Test', 'b': 'Test', 'd': 'Alex'}
>>> dict2 = {'e':'fromDict2','a':'fromDict2'} #
創建一個新字典
>>> info.update(dict2) #拿這個新字典去更新info,注意dict2中有一個key’a’dict info相沖突,這 時dict2的值會覆蓋info中的a,如果dict2keyinfo中不存在,則創建相應的紀錄
>>> info
{'a': 'fromDict2', 'c': 'Test', 'b': 'Test', 'e': 'fromDict2', 'd': 'Alex'} 













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章