1.4 列表與字典
列表與字典,這兩種類型,都是各種類型的集合,以列表為例,如果列表中包含列表,就形成嵌套。 這兩種類型幾乎是所有python腳本的主要工作組件 。 這種結構信息是可變的可修改的。不像常量,一旦定義便不能再修改。
[X]
列表 列表有以下幾大屬性,或者說是特點:- 任意對象的有序集合
- 通過偏移量來讀取
- 長度可變,異構及任意嵌套
- 屬於可變序列分類 與字符串、常量相比而言,列表是可變的,可以進行修改,增加、合並 ,刪除等操作。
- 對象引用數組
- 列表元素以逗號分隔
在標准python解析器中,列表就是C數組,而不是鏈接結構。
[X]
列表的操作關於列表的操作,我們可以通過help(list)或者 dir(list) ,或者用真實的列表替換關鍵詞list 來查看幫助文檔。 除此之外,還有一些其他固定的可用操作。 這里先了解一些常用的簡單的列表操作方法:
Table 7: 列表操作 方法 釋義 示例 l=[] 定義列表 l=['a',2,['b','c,d']] l=list(…) 定義列表 l=[c * 4 for c in 'hal'] 定義列表 l.append() 列表末尾添加新成員,列表、字典作用新成員 l.append(['a',2,'b'] l.clear() 清空列表 l.clear() l.copy(value) 復制列表 l.copy() l.count(value) 統計某個成員在列表中出現的次數 l.count('b'),l.count(l1, 2) l.extend(value) 添加新的內容(如果是列表、字典,則將 l.extend([3,{4,5}]) 字典、列表中的成員逐一添加至原列表,其 子列表作用一個整體添加)。如果type(value )=list 則合並,如果type(value)=set,那么 字典中的值會反序添加,如果是字符串,則轉 化為字典進行合並。 列表不能添加如l.extend({4,['a']}) l.index(value,[start,[stop]]) 返回列表中的值對應的索引序號。在。 start –> stop之間如果不存在想要查找 的值,則報錯 l.index({4,5}) l.insert(index,object) 在指定索引位置 前 添加新的列表成員 l.insert(2,{'a','b'}) l.pop([index]) 根據索引位置刪除相應內容。 index的值必須是單個整數,不能以列表、字 典等形式傳入,也就是只能一次刪除一個列表 成員。如果指定索引不存在則報錯。如果不指 l.pop(3) 定索引值,則默認刪除最后一個成員。 l.remove(object) 從列表中剔除成員。object必須是完整的成員 l.remove({'a','b'}) l.reverse() 將列表成員進行反序排列 l.reverse() l.sort(key=None,reverse=False)) 該方法默認升序排列。當reverse=Ture時,進 行反序排列。但是python3.0前后有點區別: 3.0之前,允許不同元素之間進行排序 。 3.0之后,不允許不同類型的列表元素進行排序 l.sort() l*2 重復列表內容 list('hal')+list('berd') 列表合並,實際上是生成了一個新的列表 l[i:j]=[] 根據索引替換相應位置的列表元素.從第i個 元素開始,包含j個元素。 len(l) 返回列表元素的個數 3 in l 判斷列表l中是否為有3的元素,注意數據類型 del l[ [index] ] 刪除列表中的某個元素,或者刪除整個列表 - 思考
-
通過使用索引,在列表首尾添加新元素。
答案: l[len[l]:]=[x]; l[:0]=[x] 使用索引進行列表調整,可以實現append,remove,pop,insert等功能. 請注意,添加新元素的數據類型。比如列表與字符串
[X]
字典 字典可以說是列表以外最靈活的內置數據結構。 字典有以下屬性:- 通過鍵來存取值而不是通過偏移量,鍵必須是不可變類型。
- 字典元素為無序集合
- 可變長,異構,任意嵌套
- 屬於可變映射類型
- 散列表。通過hash運算進行數據檢索。與列表一樣存儲對象的引用而不是拷貝。
- 字典操作
Table 8: 字典操作 方法 釋義 示例 d={} 定義空字典 d={} d={'a':'b','name':'halberd'} 定義字典 d={'name':'halberd'} d=dict(mappint) 定義字典,這種寫法比較復雜難懂。由於dict只能接受 d=dict(( ('key1','value1'),('key2','value2'),… )) 一個參數,因此在dict()方法內部必須包含一個代表 整體的符號,可用的為“(),”“[],” 但是"{},"不能用,dict(()) 或者dict([]),在最內部為key/value的值信息,這樣 形成三層結構: 第一層為:dict() 第二層為:dict(()) 或者 dict([]) 第三層為:dict((['key1','value1'],('key2','value2'),…)) d=dict(zip(keys,values)) 定義字典。 其中keys,與values 的類型分別可以為字符串, 列表,或者range()等函數返回的一系列值等 d=dict(zip('abcd',range(1,5))) d.clear() 清空字典,不需要傳入任何參數。 d.clear() d.copy() 將原字典復制出一個新的字典 e=d.copy() d.fromkeys(iterable,value) 定義一個字典中的keys,並賦予相同的值.value默認為None dict.fromkeys(['a','b'],'123') iterable 可以是列表,也可以是字典。如果是列表,則列表中 dict.fromkeys({'name':'halberd','age':20},100) 每個成員都會轉換成key,如果是字典,則將value 賦值給字典 中的key d.get(key[,values]) 取出字典中鍵對應的值。也可以使用value給予一個新的值。但 對原來的字典無影響。不寫value部分的時候取出的是字典中key 對應的值,此時相當於dict[key]。寫value里,得到的結果是 d.get('name'[,'guess']) value d.items() 以列表返回可遍歷的(鍵, 值) 元組數組 d.items() d.keys() 以列表返回一個字典所有的鍵 d.keys() d.values 以列表返回一個字典所有的值 d.values() d.pop(key[,value]) 刪除字典中的key及對應的值,同 del d[key] d.pop('name'[,'halberd']) d.popitem() 此方法不需要任何參數,默認刪除最后一個key:value. 返回的 d={'name':'halberd','age':2,'gender':'male'} 是被刪除的key 及對應的value,以元組形式返回,但是如果是空 d.popitem() 字典,則返回錯誤信息 d.setdefault(key[,value])) 返回key對應的值,但是如果key在原字典中不存在,則追加 d.setdefault('gender','male') 如果key不存在,並且沒有提供對應的value,則默認是'None' d.update() 1. 合並字典。比如dict1與dict2 dict1.update(dict2)會將 d2={'gender':'male'} dict2 的內容合並至dict1,如果dict2包含於dict1,則無變化 d.update(d2) 2. dict1使用update將其他類型的數據,以字典key:value的形 d.update(work='IT-migrant-worker',married='NO') 式合並到dict1中 d.update((['work','IT-migrant-worker'],['married','NO'])) d.update([('work','IT-migrant-worker'),('married','NO')]) d.update(zip(('work','married'),('IT-migrant-worker','NO'))) d.update(zip(['work','married'],['IT-migrant-worker','NO'])) len(dict) 計算字典key=value的個數 len(d) del dict[key] 刪除字典中某一個key 及對應值,同dict.pop(key) del d['name'] del dict 刪除字典 del d
- 字典操作