Python核心程式設計 映像和集合型別

2021-07-23 15:05:08 字數 4170 閱讀 9802

對映型別物件裡雜湊值(鍵,key)和指向的物件(值,value)是一對多的關係。

>>> dict1 = 

>>> dict1 = {}

>>> dict2 =

>>> dict1, dict2

({}, )

>>> fdict = dict(['x', 1], ['y', 2])

traceback (most recent call last):

file "", line 1, in typeerror: dict expected at most 1 arguments, got 2

dict expected at most 1 arguments, got 2

>>> fdict = dict((['x', 1], ['y', 2]))

>>> fdict

python 2.2 起可以用工廠函式dict()來建立字典。從python 2.3 起,可以用內建方法fromkeys() 來建立乙個「預設」字典,字典中的元素具有相同的值(若沒有給出,則為none):

>>> ddict = {}.fromkeys(('x', 'y'), 1)

>>> ddict

>>> edict = {}.fromkeys(('a', 'b'))

>>> edict

>>> for key in dict2:

... print 'key=%s, value=%s' % (key, dict2[key])

key=name, value=earth

key=port, value=80

>>> dict2['name']

'earth'

>>> dict2['name'] = 'venus'

>>> dict2['port'] = '88'

>>> dict2['arch'] = 'sunos'

>>> dict2

>>> print 'host %(name)s is running on port %(port)s' %dict2

host venus is running on port 88

1、字典的鍵查詢操作符()

2、成員關係操作(in, not in)

字典的比較:首先是字典的大小,然後是鍵,最後是值。

dict()  不提供引數,生成空字典。若引數是另乙個字典,dict()則會從存在的字典裡複製內容來生成新的字典。新生成的字典是原來的淺複製版本,但是速度比字典內建方法copy() 慢。

len()

hash()  判斷某個物件是否可以作為字典的鍵。

dict.clear()     dict clear()    dict.fromkeys(seq, val=none)    dict.get(key, default=none)    dict.has_key(key)     dict.items()    dict.keys()    dict.iter*()---     

dict.pop(key, [,default])    dict.setdefault(key, default=none)    dict.update(dict2)     dict.values()

當有鍵發生衝突,取最後的賦值。

所有的不可變物件都是可雜湊的。值相等的數字表示相同的鍵,比如 1  和 1.0  的雜湊值相同。

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

>>> s = set('cheeseshop')

>>> s

set(['c', 'e', 'h', 'o', 'p', 's'])

>>> t = frozenset('bookshop')

>>> t

frozenset(['b', 'h', 'k', 'o', 'p', 's'])

>>> len(s)

6>>> len(s) == len(t)

true

>>> 'k' in s

false

>>> 'k' in t

true

>>> for i in t:

... print ibh

kops

>>> s.add('x')

>>> s

set(['c', 'e', 'h', 'o', 'p', 's', 'x'])

>>> s.update('update')

>>> s

set(['a', 'c', 'e', 'd', 'h', 'o', 'p', 's', 'u', 't', 'x'])

>>> s.remove('x')

>>> s

set(['a', 'c', 'e', 'd', 'h', 'o', 'p', 's', 'u', 't'])

>>> s -= set('update')

>>> s

set(['c', 'h', 'o', 's'])

>>> del s

>>> s

traceback (most recent call last):

file "", line 1, in nameerror: name 's' is not defined

name 's' is not defined

1、 in  , not in 

2、 == , !=

3、<, <= , > , >=

1、 聯合 (|),有乙個等價的方法 union()

>>> s | t

set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

>>> s.union(t)

set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

2、交集(&),有乙個等價的方法, intersection()

>>> s & t

set(['h', 's', 'o', 'p'])

>>> s.intersection(t)

set(['h', 's', 'o', 'p'])

3、差補/相對補集(-)。 只屬於s 而不屬於 t  的集合

>>> s - t

set(['c', 'e'])

>>> s.difference(t)

set(['c', 'e'])

4、對稱差分(^)。 這個集合中的元素只能屬於s或者只能屬於t。

>>> s ^ t

set(['b', 'e', 'k', 'c'])

>>> s.symmetric_difference(t)

set(['b', 'e', 'k', 'c'])

5、混合集合型別操作

s是可變集合,t是乙個不可變集合,s在左邊,產生的結果仍然是可變集合。但是反過來結果就不一樣了。

>>> t | s

frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

>>> t ^ s

frozenset(['c', 'b', 'e', 'k'])

>>> t - s

frozenset(['k', 'b'])

|=   新增成員,等價於 update()

&=  保留與其他集合的共有成員

-=   保留乙個集合中除了另乙個集合中的元素之後剩下的元素

^=   返回乙個僅包含原來兩個集合中其中乙個集合的元素

標準型別函式   len()

集合型別工廠函式   set()     frozenset()

很多內建方法和操作符時幾乎等價的。但是,當使用操作符時,操作符兩邊的運算元必須是集合。但是使用內建方法時,物件也可以是迭代型別的。

第7章 映像和集合型別

7.1 對映型別 字典 字典是python語言中唯一的對映型別。乙個字典物件是可變的,它是乙個容器型別,能儲存任意個數的python物件,其中也包括其他容器型別。字典型別和序列型別容器類的區別是儲存和訪問資料的方式不同。序列型別只用數字型別的鍵。對映型別也可以用其他物件型別做鍵,一般常見的是用字串做...

第7章 映像和集合型別 3

7.6 集合型別 集合物件是一組無序排列的可雜湊的值。集合成員可以做字典中的鍵。集合支援in和not in操作符檢查成員,由len 內建函式得到集合的基數,用for迴圈迭代集合的成員。但因為集合本身是無序的,所以不可以為集合建立索引或執行切片操作,也沒有鍵可用來獲取集合中元素的值。集合有兩種不同的型...

python核心程式設計

文件字串 應該多用,help 的作用就是把builtin的函式的文件字串取出然後列印出來。1 usr bin python 2 def printmax a,b 3 print max of two int numbers 4 x int a 5 y int b 6 if x y 7 print x...