python學習05 對映和集合型別

2021-07-12 00:14:02 字數 4499 閱讀 7102

字典是 python 語言中唯一的對映型別。對映型別物件裡雜湊值(鍵) 和指向的物件(值)是一對多的關係。乙個字典物件是可變的,它是乙個容器型別,能儲存任意個數的 python 物件,其中也包括其他容器型別。字典型別和序列型別容器類(列表、元組)的區別是儲存和訪問資料的方式不同。序列型別只用數字型別的鍵(從序列的開始起按數值順序索引)。對映型別可以用其他物件型別做鍵;一般最常見的是用字串做鍵(keys)。對映型別中的資料是無序排列的。

建立字典只需要把字典賦值給乙個變數,不管這個字典是否包含元素,可以用工廠方法 dict() 來建立字典。可以用乙個很方便的內建方法 fromkeys() 來建立乙個」預設」字典, 字典中元素具有相同的值 (如果沒有給出, 預設為 none)。

避免使用內建物件名字作為變數的識別符號。請不要用 dict, list,file, bool, str, input, len 這樣的內建型別為變數命名。

字典的鍵查詢操作符([ ])

d[k] = v 通過鍵』k』,給字典中某元素賦值』v』

d[k] 通過鍵』k』,查詢字典中某元素的值

(鍵)成員關係操作( in ,not in)

cmp() 字典是通過這樣的演算法來比較的: 首先是字典的大小,然後是鍵,最後是值。

對映型別相關的函式

dict() 當容器型別物件做為乙個引數傳遞給方法 dict() 時很有意思。如果引數是可以迭代的,那每個可迭代的元素必須成對出現。在每個值對中,第乙個元素是字典的鍵、第二個元素是字典中的值。

如果輸入引數是(另)乙個對映物件,比如,乙個字典物件,對其呼叫 dict()會從存在的字典裡複製內容來生成新的字典。新生成的字典是原來字典物件的淺複製版本, 它與用字典的內建方法copy() 生成的字典物件是一樣的。但是從已存在的字典生成新的字典速度比用 copy()方法慢,我們推薦使用 copy()。

hash() 它可以判斷某個物件是否可以做乙個字典的鍵。如果非可雜湊型別作為引數傳遞給 hash()方法,會產生 typeerror 錯誤。

keys()方法,返回乙個列表,包含字典中所有的鍵,values()方法,返回乙個列表,包含字典中所有的值,items(), 返回乙個包含所有(鍵, 值)元組的列表。

dict.clear() 清除字典中的所有元素

dict.copy() 返回字典的乙個淺拷貝

dick.fromkeys(seq, val=none) 建立並返回乙個新字典,以 seq 中的元素做該字典的鍵,val 做該字典中所有鍵對應的初始值(如果不提供此值,則預設為 none)

dict.get(key,default=none) 對字典 dict 中的鍵 key,返回它對應的值 value,如果字典中不存在此鍵,則返回 default 的值(注意,引數 default 的預設值為 none)

dict.items() 返回乙個包含字典中(鍵, 值)對元組的列表

dict.keys() 返回乙個包含字典中鍵的列表

dict.iter() 方法 iteritems(), iterkeys(), itervalues()與它們對應的非迭代方法一樣,不同的是它們返回乙個迭代子,而不是乙個列表。

dict.pop(key[, default]) 和方法 get()相似,如果字典中 key 鍵存在,刪除並返回 dict[key],如果 key 鍵不存在,且沒有給出 default 的值,引發 keyerror 異常。

dict.setdefault(key,default=none) 和方法 set()相似,如果字典中不存在 key 鍵,由 dict[key]=default 為它賦值。

dict.update(dict2) 將字典 dict2 的鍵-值對新增到字典 dict

dict.values() 返回乙個包含字典中所有值的列表

集合型別

集合物件是一組無序排列的可雜湊的值。是的,集合成員可以做字典中的鍵。

因為集合本身是無序的,你不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值。

集合(sets)有兩種不同的型別,可變集合(set) 和 不可變集合(frozenset)。如你所想,對可變集合(set),你可以新增和刪除元素,對 不可變集合(frozenset)則不允許這樣做。請注意,可變集合(set)不是可雜湊的,因此既不能用做字典的鍵也不能做其他集合中的元素。不可變集合(frozenset)則正好相反,即,他們有雜湊值,能被用做字典的鍵或是作為集合中的乙個成員。

集合被建立的唯一方法 - 用集合的工廠方法 set()和 frozenset()

你可以遍歷檢視集合成員或檢查某項元素是否是乙個集合中的成員

就序列而言,python 中的 in 和 not in 操作符決定某個元素是否是乙個集合中的成員。

等價/不等價被用於在相同或不同的集合之間做比較。兩個集合相等是指,對每個集合而言,當且僅當其中乙個集合中的每個成員同時也是另乙個集合中的成員。

sets 用 python 的比較操作符檢查某集合是否是其他集合的超集或子集。「小於」符號( <, <= )用來判斷子集,「大於」符號( >, >= )用來判斷超集。

聯合( | )

聯合(union)操作和集合的 or(又稱可兼析取(inclusive disjunction))其實是等價的,兩個集合的聯合是乙個新集合,該集合中的每個元素都至少是其中乙個集合的成員,即,屬於兩個集合其中之一的成員。聯合符號有乙個等價的方法,union().

交集( & )

你可以把交集操作比做集合的 and(或合取)操作。兩個集合的交集是乙個新集合,該集合中的每個元素同時是兩個集合中的成員,即,屬於兩個集合的成員。交集符號有乙個等價的方法,intersection().

差補/相對補集( – )

兩個集合(s 和 t)的差補或相對補集是指乙個集合 c,該集合中的元素,只屬於集合 s,而不屬於集合 t。差符號有乙個等價的方法,difference().

對稱差分( ^ )

和其他的布林集合操作相似,對稱差分是集合的 xor(又稱」異或「 (exclusive disjunction)).兩個集合(s 和 t)的對稱差分是指另外乙個集合 c,該集合中的元素,只能是屬於集合 s 或者集合 t的成員,不能同時屬於兩個集合。對稱差分有乙個等價的方法,symmetric_difference().

set([『k』, 『b』, 『e』, 『c』])

如果左右兩個運算元的型別相同,既都是可變集合或不可變集合, 則所產生的結果型別是相同的,但如果左右兩個運算元的型別不相同(左運算元是 set,右運算元是 frozenset,或相反情況),則所產生的結果型別與左運算元的型別相同。

集合型別操作符(僅適用於可變集合)

(union) update ( |= ) 這個更新方法從已存在的集合中新增(可能多個)成員,此方法和 update()等價

保留/交集更新( &= ) 保留(或交集更新)操作保留與其他集合的共有成員。此方法和 intersection_update()等價.

差更新 ( –= ) 對集合 s 和 t 進行差更新操作 s-=t,差更新操作會返回乙個集合,該集合中的成員是集合 s 去除掉集合 t 中元素後剩餘的元素。此方法和 difference_update()等價.

對稱差分更新( ^= ) 對集合 s 和 t 進行對稱差分更新操作(s^=t),對稱差分更新操作會返回乙個集合,該集合中的成員僅是原集合 s 或僅是另一集合 t 中的成員。此方法和 symmetric_difference_update()等價.

集合型別方法

s.issubset(t) 如果 s 是 t 的子集,則返回 true,否則返回 false

s.isuperset(t) 如果 t 是 s 的超集,則返回 true,否則返回 false

s.union(t) 返回乙個新集合,該集合是 s 和 t 的並集

s.intersection(t) 返回乙個新集合,該集合是 s 和 t 的交集

s.difference(t) 返回乙個新集合,該集合是 s 的成員,但不是 t 的成員

s.symmetric_difference(t) 返回乙個新集合,該集合是 s 或 t 的成員,但不是 s 和 t 共有的成員.

s.copy() 返回乙個新集合,它是集合 s 的淺複製

s.update(t) 用 t 中的元素修改 s, 即,s 現在包含 s 或 t 的成員

s.intersection_update(t) s 中的成員是共同屬於 s 和 t 的元素。

s.difference_update(t) s 中的成員是屬於 s 但不包含在 t 中的元素

s.symmetric_difference_update(t) s 中的成員更新為那些包含在 s 或 t 中,但不是s和 t 共有的元素

s.add(obj) 在集合 s 中新增物件 obj

s.remove(obj) 從集合 s 中刪除物件 obj;如果 obj 不是集合 s 中的元素(obj notin s),將引發 keyerror 錯誤

s.discard(obj) 如果 obj 是集合 s 中的元素,從集合 s 中刪除物件 obj;

s.pop() 刪除集合 s 中的任意乙個物件,並返回它

s.clear() 刪除集合 s 中的所有元素

學習總結 對映集合

對映 對映的組成 鍵 值對 key value 在乙個map中,鍵key是不可以重複的,是唯一的,value是可以重複的,乙個鍵key對應乙個值value 有hashmap,treemap,linkedhashmap三種,特點與set類似 格式 maplove new hashmap jdk6 格式...

集合和對映 Set and Map

集合是具有某種相似特性的事物的全體。它的重要特點是其中的資料元素無序且不重複,這也就是判斷是否使用該容器的依據。利用我之前的樹的定義和實現中的bst.go函式來呼叫而實現的 package arr type set struct 利用二分搜尋樹來實現結合的curd 新增元素到集合中 func set...

python2 x學習筆記 8 對映和集合型別

size medium 1.字典是 python 語言中唯一的對映型別。對映型別物件裡雜湊值 鍵 和指向的物件 值 是一對一的關係.2.乙個字典物件是可變的,它是乙個容器型別,能儲存任意個數的 python 物件,其中也包括其他容器型別。字典型別和序列型別容器類 列表 元組 的區別是儲存和訪問資料的...