列表(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] #從1至8隔一個取一個,後面的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] #刪除索引3至8的元素,不包括8
>>> for i in shopping_list: #遍歷列表
... print i
元組(Tuple)
另一種有序列表叫元組:tuple。tuple 和 list 非常類似,但是 tuple 一旦初始化就不能修改, 比如同樣是列出同學的名字
>>> classmates = ('Michael', 'Bob', 'Tracy')
只有1個元素的tuple定義時必須加一個逗號 ,來消除歧義:
>>>> t = (1,)
字典(Dict)
列表允許你通過一個變量存儲大量的信息,但試想以下場景,用列表實現就可能 效率較低了:
存儲的信息量越來越多,有的時候找一個數據可能要循環整個列表,耗時較
長。
單個元素包含的信息量變多時,比如,之前只是存儲姓名列表,現在是要存
儲姓名、年齡、身份證號、地址、工作等這個人的很多信息,用列表去存儲
很費勁
要求存儲的數據是不重複,我們知道列表是允許的重複值的,當然想存儲時
就讓我的數據默認就是唯一的話,用列表就不可以了
以上這些是列表不擅長的地方,卻恰恰是我們接下來要講的 dict 所擅長的方面,dict 使用 key-value 的形式存儲數據,dict 的 key 是唯一的,所以你可以通過 key來唯一的定位到你的數據。之所以叫字典(在其它語言中稱爲 map),是因爲 dict的數據結構跟我們生活中用的字典是一樣的,查英文字典時,輸入單詞,就可以 定位到這個單詞意思的詳細解釋,其中這個單詞就是 key,對應的詞義解釋就是value.字典有如下特點:
key-value 格式,key 是唯一的
無序,與列表有序的特點不同,字典是無序的,列表只所以有序是因爲你需
要通過索引來定位相應元素,而字典已經可以通過 key 來定位相應 value,因 此爲了避免浪費存儲空間,字典不會對數據的位置進行紀錄,當然如果你想 讓其變成有序的,也是有方法的,這個我們以後再講。
查詢速度很快,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() #將dict的key,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存在,就直接返回這個key的value,見下一條
'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,如果dict2的key在info中不存在,則創建相應的紀錄
>>> info
{'a': 'fromDict2', 'c': 'Test', 'b': 'Test', 'e': 'fromDict2', 'd': 'Alex'}