成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python標(biāo)準(zhǔn)庫---15、內(nèi)置類型:集合類型、映射類型

kycool / 3210人閱讀

摘要:目前有兩種內(nèi)置集合類型,和。兩個(gè)類的構(gòu)造器具有相同的作用方式返回一個(gè)新的或?qū)ο?,其元素來自于。要表示由集合?duì)象構(gòu)成的集合,所有的內(nèi)層集合必須為對(duì)象。目前僅有一種標(biāo)準(zhǔn)映射類型字典。

上一篇文章:Python標(biāo)準(zhǔn)庫---14、內(nèi)置類型:二進(jìn)制序列類型 (memoryview)
下一篇文章:Python標(biāo)準(zhǔn)庫---16、內(nèi)置類型:上下文管理器類型、其他、特殊屬性
集合類型 --- set, frozenset

set 對(duì)象是由具有唯一性的 hashable 對(duì)象所組成的無序多項(xiàng)集。 常見的用途包括成員檢測(cè)、從序列中去除重復(fù)項(xiàng)以及數(shù)學(xué)中的集合類計(jì)算,例如交集、并集、差集與對(duì)稱差集等等。 (關(guān)于其他容器對(duì)象請(qǐng)參看 dict, list 與 tuple 等內(nèi)置類,以及 collections 模塊。)

與其他多項(xiàng)集一樣,集合也支持 x in set, len(set) 和 for x in set。 作為一種無序的多項(xiàng)集,集合并不記錄元素位置或插入順序。 相應(yīng)地,集合不支持索引、切片或其他序列類的操作。

目前有兩種內(nèi)置集合類型,set 和 frozenset。 set 類型是可變的 --- 其內(nèi)容可以使用 add() 和 remove() 這樣的方法來改變。 由于是可變類型,它沒有哈希值,且不能被用作字典的鍵或其他集合的元素。 frozenset 類型是不可變并且為 hashable --- 其內(nèi)容在被創(chuàng)建后不能再改變;因此它可以被用作字典的鍵或其他集合的元素。

除了可以使用 set 構(gòu)造器,非空的 set (不是 frozenset) 還可以通過將以逗號(hào)分隔的元素列表包含于花括號(hào)之內(nèi)來創(chuàng)建,例如: {"jack", "sjoerd"}。

兩個(gè)類的構(gòu)造器具有相同的作用方式:

class set([iterable]) class frozenset([iterable])
返回一個(gè)新的 set 或 frozenset 對(duì)象,其元素來自于 iterable。 集合的元素必須為 hashable。 要表示由集合對(duì)象構(gòu)成的集合,所有的內(nèi)層集合必須為 frozenset 對(duì)象。 如果未指定 iterable,則將返回一個(gè)新的空集合。

set 和 frozenset 的實(shí)例提供以下操作:
len(s)
    返回集合 s 中的元素?cái)?shù)量(即 s 的基數(shù))。

### x in s

    檢測(cè) x 是否為 s 中的成員。

### x not in s

    檢測(cè) x 是否非 s 中的成員。

### isdisjoint(other)

    如果集合中沒有與 other 共有的元素則返回 True。 當(dāng)且僅當(dāng)兩個(gè)集合的交集為空集合時(shí),兩者為不相交集合。
issubset(other) set <= other
    檢測(cè)是否集合中的每個(gè)元素都在 other 之中。

### set < other

    檢測(cè)集合是否為 other 的真子集,即 set <= other and set != other。
issuperset(other) set >= other
    檢測(cè)是否 other 中的每個(gè)元素都在集合之中。

### set > other

    檢測(cè)集合是否為 other 的真超集,即 set >= other and set != other。
union(*others) set | other | ...
    返回一個(gè)新集合,其中包含來自原集合以及 others 指定的所有集合中的元素。
intersection(*others) set & other & ...
    返回一個(gè)新集合,其中包含原集合以及 others 指定的所有集合中共有的元素。

### difference(*others)
### set - other - ...

    返回一個(gè)新集合,其中包含原集合中在 others 指定的其他集合中不存在的元素。

### symmetric_difference(other)
### set ^ other

    返回一個(gè)新集合,其中的元素或?qū)儆谠匣驅(qū)儆?other 指定的其他集合,但不能同時(shí)屬于兩者。
copy()
    返回原集合的淺拷貝。

請(qǐng)注意,非運(yùn)算符版本的 union(), intersection(), difference(),以及 symmetric_difference(), issubset() 和 issuperset() 方法會(huì)接受任意可迭代對(duì)象作為參數(shù)。 相比之下,它們所對(duì)應(yīng)的運(yùn)算符版本則要求其參數(shù)為集合。 這就排除了容易出錯(cuò)的構(gòu)造形式例如 set("abc") & "cbs",而推薦可讀性更強(qiáng)的 set("abc").intersection("cbs")。

set 和 frozenset 均支持集合與集合的比較。 兩個(gè)集合當(dāng)且僅當(dāng)每個(gè)集合中的每個(gè)元素均包含于另一個(gè)集合之內(nèi)(即各為對(duì)方的子集)時(shí)則相等。 一個(gè)集合當(dāng)且僅當(dāng)其為另一個(gè)集合的真子集(即為后者的子集但兩者不相等)時(shí)則小于另一個(gè)集合。 一個(gè)集合當(dāng)且僅當(dāng)其為另一個(gè)集合的真超集(即為后者的超集但兩者不相等)時(shí)則大于另一個(gè)集合。

set 的實(shí)例與 frozenset 的實(shí)例之間基于它們的成員進(jìn)行比較。 例如 set("abc") == frozenset("abc") 返回 True,set("abc") in set([frozenset("abc")]) 也一樣。

子集與相等比較并不能推廣為完全排序函數(shù)。 例如,任意兩個(gè)非空且不相交的集合不相等且互不為對(duì)方的子集,因此以下 所有 比較均返回 False: ab。

由于集合僅定義了部分排序(子集關(guān)系),因此由集合構(gòu)成的列表 list.sort() 方法的輸出并無定義。

集合的元素,與字典的鍵類似,必須為 hashable。

混合了 set 實(shí)例與 frozenset 的二進(jìn)制位運(yùn)算將返回與第一個(gè)操作數(shù)相同的類型。例如: frozenset("ab") | set("bc") 將返回 frozenset 的實(shí)例。

下表列出了可用于 set 而不能用于不可變的 frozenset 實(shí)例的操作:
update(*others) set |= other | ...
    更新集合,添加來自 others 中的所有元素。
intersection_update(*others) set &= other & ...
    更新集合,只保留其中在所有 others 中也存在的元素。
difference_update(*others)

### set -= other | ...

    更新集合,移除其中也存在于 others 中的元素。

### symmetric_difference_update(other)
### set ^= other

    更新集合,只保留存在于集合的一方而非共同存在的元素。
add(elem)
    將元素 elem 添加到集合中。

### remove(elem)

    從集合中移除元素 elem。 如果 elem 不存在于集合中則會(huì)引發(fā) KeyError。

### discard(elem)

    如果元素 elem 存在于集合中則將其移除。
pop()
    從集合中移除并返回任意一個(gè)元素。 如果集合為空則會(huì)引發(fā) KeyError。

### clear()

    從集合中移除所有元素。

請(qǐng)注意,非運(yùn)算符版本的 update(), intersection_update(), difference_update() 和 symmetric_difference_update() 方法將接受任意可迭代對(duì)象作為參數(shù)。

請(qǐng)注意,__contains__(), remove() 和 discard() 方法的 elem 參數(shù)可能是一個(gè) set。 為支持對(duì)一個(gè)等價(jià)的 frozenset 進(jìn)行搜索,會(huì)根據(jù) elem 臨時(shí)創(chuàng)建一個(gè)該類型對(duì)象。
映射類型 --- dict

mapping 對(duì)象會(huì)將 hashable 值映射到任意對(duì)象。 映射屬于可變對(duì)象。 目前僅有一種標(biāo)準(zhǔn)映射類型 字典。 (關(guān)于其他容器對(duì)象請(qǐng)參看 list, set 與 tuple 等內(nèi)置類,以及 collections 模塊。)

字典的鍵 幾乎 可以是任何值。 非 hashable 的值,即包含列表、字典或其他可變類型的值(此類對(duì)象基于值而非對(duì)象標(biāo)識(shí)進(jìn)行比較)不可用作鍵。 數(shù)字類型用作鍵時(shí)遵循數(shù)字比較的一般規(guī)則:如果兩個(gè)數(shù)值相等 (例如 1 和 1.0) 則兩者可以被用來索引同一字典條目。 (但是請(qǐng)注意,由于計(jì)算機(jī)對(duì)于浮點(diǎn)數(shù)存儲(chǔ)的只是近似值,因此將其用作字典鍵是不明智的。)

字典可以通過將以逗號(hào)分隔的 鍵: 值 對(duì)列表包含于花括號(hào)之內(nèi)來創(chuàng)建,例如: {"jack": 4098, "sjoerd": 4127} 或 {4098: "jack", 4127: "sjoerd"},也可以通過 dict 構(gòu)造器來創(chuàng)建。

class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg)
返回一個(gè)新的字典,基于可選的位置參數(shù)和可能為空的關(guān)鍵字參數(shù)集來初始化。

如果沒有給出位置參數(shù),將創(chuàng)建一個(gè)空字典。 如果給出一個(gè)位置參數(shù)并且其屬于映射對(duì)象,將創(chuàng)建一個(gè)具有與映射對(duì)象相同鍵值對(duì)的字典。 否則的話,位置參數(shù)必須為一個(gè) iterable 對(duì)象。 該可迭代對(duì)象中的每一項(xiàng)本身必須為一個(gè)剛好包含兩個(gè)元素的可迭代對(duì)象。 每一項(xiàng)中的第一個(gè)對(duì)象將成為新字典的一個(gè)鍵,第二個(gè)對(duì)象將成為其對(duì)應(yīng)的值。 如果一個(gè)鍵出現(xiàn)一次以上,該鍵的最后一個(gè)值將成為其在新字典中對(duì)應(yīng)的值。

如果給出了關(guān)鍵字參數(shù),則關(guān)鍵字參數(shù)及其值會(huì)被加入到基于位置參數(shù)創(chuàng)建的字典。 如果要加入的鍵已存在,來自關(guān)鍵字參數(shù)的值將替代來自位置參數(shù)的值。

作為演示,以下示例返回的字典均等于 {"one": 1, "two": 2, "three": 3}:
    >>> a = dict(one=1, two=2, three=3)
    >>> b = {"one": 1, "two": 2, "three": 3}
    >>> c = dict(zip(["one", "two", "three"], [1, 2, 3]))
    >>> d = dict([("two", 2), ("one", 1), ("three", 3)])
    >>> e = dict({"three": 3, "one": 1, "two": 2})
    >>> a == b == c == d == e
    True
像第一個(gè)例子那樣提供關(guān)鍵字參數(shù)的方式只能使用有效的 Python 標(biāo)識(shí)符作為鍵。 其他方式則可使用任何有效的鍵。

這些是字典所支持的操作(因而自定義的映射類型也應(yīng)當(dāng)支持):
len(d)
    返回字典 d 中的項(xiàng)數(shù)。
d[key]
    返回 d 中以 key 為鍵的項(xiàng)。 如果映射中不存在 key 則會(huì)引發(fā) KeyError。

    如果字典的子類定義了方法 __missing__() 并且 key 不存在,則 d[key] 操作將調(diào)用該方法并附帶鍵 key 作為參數(shù)。 d[key] 隨后將返回或引發(fā) __missing__(key) 調(diào)用所返回或引發(fā)的任何對(duì)象或異常。 沒有其他操作或方法會(huì)發(fā)起調(diào)用 __missing__()。 如果未定義 __missing__(),則會(huì)引發(fā) KeyError。 __missing__() 必須是一個(gè)方法;它不能是一個(gè)實(shí)例變量:
        >>> class Counter(dict):
        ...     def __missing__(self, key):
        ...         return 0
        >>> c = Counter()
        >>> c["red"]
        0
        >>> c["red"] += 1
        >>> c["red"]
        1
    上面的例子顯示了 collections.Counter 實(shí)現(xiàn)的部分代碼。 還有另一個(gè)不同的 __missing__ 方法是由 collections.defaultdict 所使用的。
d[key] = value
    將 d[key] 設(shè)為 value。
del d[key]
    將 d[key] 從 d 中移除。 如果映射中不存在 key 則會(huì)引發(fā) KeyError。
key in d
    如果 d 中存在鍵 key 則返回 True,否則返回 False。
key not in d
    等價(jià)于 not key in d。
iter(d)
    返回以字典的鍵為元素的迭代器。 這是 iter(d.keys()) 的快捷方式。
clear()
    移除字典中的所有元素。

### copy()

    返回原字典的淺拷貝。

### classmethod fromkeys(iterable[, value])

    使用來自 iterable 的鍵創(chuàng)建一個(gè)新字典,并將鍵值設(shè)為 value。

    fromkeys() 屬于類方法,會(huì)返回一個(gè)新字典。 value 默認(rèn)為 None。
get(key[, default])
    如果 key 存在于字典中則返回 key 的值,否則返回 default。 如果 default 未給出則默認(rèn)為 None,因而此方法絕不會(huì)引發(fā) KeyError。

### items()

    返回由字典項(xiàng) ((鍵, 值) 對(duì)) 組成的一個(gè)新視圖。 參見 視圖對(duì)象文檔。
keys()
    返回由字典鍵組成的一個(gè)新視圖。 參見 視圖對(duì)象文檔。
pop(key[, default])
    如果 key 存在于字典中則將其移除并返回其值,否則返回 default。 如果 default 未給出且 key 不存在于字典中,則會(huì)引發(fā) KeyError。
popitem()
    從字典中移除并返回一個(gè) (鍵, 值) 對(duì)。 鍵值對(duì)會(huì)按 LIFO 的順序被返回。

    popitem() 適用于對(duì)字典進(jìn)行消耗性的迭代,這在集合算法中經(jīng)常被使用。 如果字典為空,調(diào)用 popitem() 將引發(fā) KeyError。

    在 3.7 版更改: 現(xiàn)在會(huì)確保采用 LIFO 順序。 在之前的版本中,popitem() 會(huì)返回一個(gè)任意的鍵/值對(duì)。
setdefault(key[, default])
    如果字典存在鍵 key ,返回它的值。如果不存在,插入值為 default 的鍵 key ,并返回 default 。 default 默認(rèn)為 None。
update([other])
    使用來自 other 的鍵/值對(duì)更新字典,覆蓋原有的鍵。 返回 None。

    update() 接受另一個(gè)字典對(duì)象,或者一個(gè)包含鍵/值對(duì)(以長度為二的元組或其他可迭代對(duì)象表示)的可迭代對(duì)象。 如果給出了關(guān)鍵字參數(shù),則會(huì)以其所指定的鍵/值對(duì)更新字典: d.update(red=1, blue=2)。
values()
    返回由字典值組成的一個(gè)新視圖。 參見 視圖對(duì)象文檔。

兩個(gè)字典的比較當(dāng)且僅當(dāng)具有相同的 (鍵, 值) 對(duì)時(shí)才會(huì)相等。 順序比較 ("<", "<=", ">=", ">") 會(huì)引發(fā) TypeError。

字典會(huì)保留插入時(shí)的順序。 請(qǐng)注意對(duì)鍵的更新不會(huì)影響順序。 刪除并再次添加的鍵將被插入到末尾。

    >>> d = {"one": 1, "two": 2, "three": 3, "four": 4}
    >>> d
    {"one": 1, "two": 2, "three": 3, "four": 4}
    >>> list(d)
    ["one", "two", "three", "four"]
    >>> list(d.values())
    [1, 2, 3, 4]
    >>> d["one"] = 42
    >>> d
    {"one": 42, "two": 2, "three": 3, "four": 4}
    >>> del d["two"]
    >>> d["two"] = None
    >>> d
    {"one": 42, "three": 3, "four": 4, "two": None}
在 3.7 版更改: 字典順序會(huì)確保為插入順序。 此行為是自 3.6 版開始的 CPython 實(shí)現(xiàn)細(xì)節(jié)。

參見

types.MappingProxyType 可被用來創(chuàng)建一個(gè) dict 的只讀視圖。

字典視圖對(duì)象

由 dict.keys(), dict.values() 和 dict.items() 所返回的對(duì)象是 視圖對(duì)象。 該對(duì)象提供字典條目的一個(gè)動(dòng)態(tài)視圖,這意味著當(dāng)字典改變時(shí),視圖也會(huì)相應(yīng)改變。

字典視圖可以被迭代以產(chǎn)生與其對(duì)應(yīng)的數(shù)據(jù),并支持成員檢測(cè):

len(dictview)
返回字典中的條目數(shù)。
iter(dictview)
返回字典中的鍵、值或項(xiàng)(以 (鍵, 值) 為元素的元組表示)的迭代器。

鍵和值是按插入時(shí)的順序進(jìn)行迭代的。 這樣就允許使用 zip() 來創(chuàng)建 (值, 鍵) 對(duì): pairs = zip(d.values(), d.keys())。 另一個(gè)創(chuàng)建相同列表的方式是 pairs = [(v, k) for (k, v) in d.items()].

在添加或刪除字典中的條目期間對(duì)視圖進(jìn)行迭代可能引發(fā) RuntimeError 或者無法完全迭代所有條目。

在 3.7 版更改: 字典順序會(huì)確保為插入順序。
x in dictview
如果 x 是對(duì)應(yīng)字典中存在的鍵、值或項(xiàng)(在最后一種情況下 x 應(yīng)為一個(gè) (鍵, 值) 元組) 則返回 True。

鍵視圖類似于集合,因?yàn)槠錀l目不重復(fù)且可哈希。 如果所有值都是可哈希的,即 (鍵, 值) 對(duì)也是不重復(fù)且可哈希的,那么條目視圖也會(huì)類似于集合。 (值視圖則不被視為類似于集合,因其條目通常都是有重復(fù)的。) 對(duì)于類似于集合的視圖,為抽象基類 collections.abc.Set 所定義的全部操作都是有效的 (例如 ==, < 或 ^)。

一個(gè)使用字典視圖的示例:

>>>

>>> dishes = {"eggs": 2, "sausage": 1, "bacon": 1, "spam": 500}
>>> keys = dishes.keys()
>>> values = dishes.values()

>>> # iteration
>>> n = 0
>>> for val in values:
...     n += val
>>> print(n)
504

>>> # keys and values are iterated over in the same order (insertion order)
>>> list(keys)
["eggs", "sausage", "bacon", "spam"]
>>> list(values)
[2, 1, 1, 500]

>>> # view objects are dynamic and reflect dict changes
>>> del dishes["eggs"]
>>> del dishes["sausage"]
>>> list(keys)
["bacon", "spam"]

>>> # set operations
>>> keys & {"eggs", "bacon", "salad"}
{"bacon"}
>>> keys ^ {"sausage", "juice"}
{"juice", "sausage", "bacon", "spam"}
上一篇文章:Python標(biāo)準(zhǔn)庫---14、內(nèi)置類型:二進(jìn)制序列類型 (memoryview)
下一篇文章:Python標(biāo)準(zhǔn)庫---16、內(nèi)置類型:上下文管理器類型、其他、特殊屬性

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44011.html

相關(guān)文章

  • Python標(biāo)準(zhǔn)---16、內(nèi)置類型:上下文管理器類型、其他、特殊屬性

    摘要:退出運(yùn)行時(shí)上下文并返回一個(gè)布爾值旗標(biāo)來表明所發(fā)生的任何異常是否應(yīng)當(dāng)被屏蔽。除了實(shí)現(xiàn)上下文管理協(xié)議以外,不同類型不會(huì)被特殊處理。其中一些并不會(huì)被內(nèi)置函數(shù)所列出。 上一篇文章:Python標(biāo)準(zhǔn)庫---15、內(nèi)置類型:集合類型、映射類型下一篇文章:Python標(biāo)準(zhǔn)庫---17、內(nèi)置異常 上下文管理器類型 Python 的 with 語句支持通過上下文管理器所定義的運(yùn)行時(shí)上下文這一概念。 此...

    zhisheng 評(píng)論0 收藏0
  • Python標(biāo)準(zhǔn)---14、內(nèi)置類型:二進(jìn)制序列類型 (memoryview)

    摘要:對(duì)于更高的維度,其長度等于表示的嵌套列表的長度。這是數(shù)組在連續(xù)表示時(shí)將會(huì)占用的空間總字節(jié)數(shù)。該值僅作為參考信息。新版功能一個(gè)表明內(nèi)存是否為的布爾值。新版功能上一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型二進(jìn)制序列類型下一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型集合類型映射類型 上一篇文章:Python標(biāo)準(zhǔn)庫---13、內(nèi)置類型:二進(jìn)制序列類型 ( bytes, bytearray)下一篇文章:Python標(biāo)準(zhǔn)庫---15、內(nèi)置...

    yacheng 評(píng)論0 收藏0
  • Python標(biāo)準(zhǔn)---2、內(nèi)置函數(shù)(D-E-F)

    摘要:如果對(duì)象允許,該函數(shù)將刪除指定的屬性。返回值為表達(dá)式求值的結(jié)果。語法錯(cuò)誤將作為異常被報(bào)告。該函數(shù)返回值是。例如數(shù)字類型描述了浮點(diǎn)類型。將轉(zhuǎn)換為控制的格式化表示。上一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù) 上一篇文章:Python標(biāo)準(zhǔn)庫---1、內(nèi)置函數(shù)(A-B-C)下一篇文章:Python標(biāo)準(zhǔn)庫---3、內(nèi)置函數(shù)(G-H-I-J-K) 內(nèi)置函數(shù): showImg(https:/...

    Fourierr 評(píng)論0 收藏0
  • Python3,68個(gè)內(nèi)置函數(shù)詳解,進(jìn)階必備,必須收藏?。?

    摘要:判斷奇數(shù)是迭代器會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射語法可以對(duì)可迭代對(duì)象中的每一個(gè)元素進(jìn)行映射。 python內(nèi)置庫詳解 1、引言2、內(nèi)置庫詳解2.1 數(shù)據(jù)相關(guān)2.1...

    lindroid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

kycool

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<