做(zuò)自(zì)由與創造的先行(xíng)者

Types: 7. Set Types — set, frozenset

Python開(kāi)發手冊

7. Set Types — set, frozenset

一(yī)個set對象是不同的無序集合可(kě)哈希對象。常見(jiàn)用途包括成員(yuán)資格測試,删除序列中的重複項,以及計算數(shù)學運算,如(rú)交集,聯合,差異和(hé)對稱差異。(對于其它容器看(kàn)到內(nèi)置在dict(),list()和(hé)tuple()函數(shù)和(hé)collections模塊)。

2.4版本中的新功能(néng)。

像其他(tā)收藏品,集支持x in set,len(set)和(hé)for x in set。作(zuò)為(wèi)無序集合,集合不會記錄元素位置或插入順序。因此,集合不支持索引,切片或其他(tā)類序列行(xíng)為(wèi)。

目前有兩個內(nèi)置集類型,set和(hé)frozenset。該set類型是可(kě)變的 - 可(kě)以使用類似add()和(hé)的方法更改內(nèi)容remove()。由于它是可(kě)變的,因此它沒有散列值,不能(néng)用作(zuò)字典鍵或另一(yī)個集的元素。該frozenset類型是不可(kě)變的且可(kě)拆分的 - 其內(nèi)容在創建後不能(néng)更改; 因此它可(kě)以用作(zuò)字典鍵或另一(yī)組元素。

從(cóng)Python 2.7開(kāi)始,可(kě)以通(tōng)過在花括号中放置以逗号分隔的元素列表來創建非空集(非frozensets),例如(rú):{'jack', 'sjoerd'}除set構造函數(shù)之外(wài)。

這(zhè)兩個類的構造函數(shù)都(dōu)是一(yī)樣的:

class set([iterable])class frozenset([iterable])

返回其元素從(cóng)叠代中獲取的新集或凍結集對象。一(yī)組元素必須是可(kě)散列的。為(wèi)了(le)表示集合集合,內(nèi)部集合必須是frozenset對象。如(rú)果未指定iterable,則返回一(yī)個新的空集。

實例set并frozenset提供以下(xià)操作(zuò):

len(s)

返回集合的元素數(shù)小号(基數(shù)小号)。

x in s

測試x在s中的成員(yuán)身份。

x not in s

Test x for non-membership in s.

isdisjoint(other)

True如(rú)果集合沒有與其他(tā)元素相同的元素,則返回。當且僅當它們的交集是空集時(shí),集合才是不相交的。

2.6版本中的新功能(néng)。

issubset(other)set <= other

測試集合中的每個元素是否在其他(tā)元素中。

set < other

測試該集合是否是其他(tā)集合的正确子集,也就是說set <= other and set != other。

issuperset(other)set >= other

測試其他(tā)元素中的每個元素是否在集合中。

set > other

測試集合是否是其他(tā)集合的正确集合,也就是說set >= other and set != other。

union(*others)set | other | ...

用集合中的元素和(hé)所有其他(tā)元素返回一(yī)個新集合。

在版本2.6中更改:接受多個輸入叠代。

intersection(*others)set & other & ...

返回一(yī)個新集合,其中包含該集合和(hé)其他(tā)所有元素共有的元素。

在版本2.6中更改:接受多個輸入叠代。

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

返回集合中不包含其他(tā)元素的新集合。

在版本2.6中更改:接受多個輸入叠代。

symmetric_difference(other)set ^ other

用集合中的元素或其他(tā)元素返回一(yī)個新集合,但(dàn)不能(néng)同時(shí)返回兩個元素。

copy()

用s的淺拷貝返回一(yī)個新的集合。

注意,對非運營商的版本union(),intersection(),difference(),和(hé)symmetric_difference(),issubset()和(hé)issuperset()方法将接受任何可(kě)叠代作(zuò)為(wèi)參數(shù)。相反,他(tā)們的基于操作(zuò)員(yuán)的對應方要(yào)求他(tā)們的參數(shù)是集合。這(zhè)排除了(le)易于出錯的結構,例如(rú)set('abc') & 'cbs'有利于更具可(kě)讀性的結構set('abc').intersection('cbs')。

雙方set并frozenset支持設置來設置比較。當且僅當每個集合中的每個元素都(dōu)包含在另一(yī)個中(每個元素是另一(yī)個的子集)時(shí),兩個集合是相等的。當且僅當第一(yī)組是第二組的合适子集(是子集,但(dàn)不相等)時(shí),集合小于另一(yī)集合。當且僅當第一(yī)個集合是第二個集合的适當超集(是超集,但(dàn)不相等)時(shí),集合比另一(yī)集合大。

的實例set進行(xíng)比較的情況下(xià),frozenset根據自(zì)己的成員(yuán)。例如(rú),set('abc') == frozenset('abc')返回True等等set('abc') in set([frozenset('abc')])。

子集和(hé)等式比較不推廣到總排序函數(shù)。例如(rú),任何兩個非空不相交的集合不相等,并且不彼此的子集,所以所有的以下(xià)返回False:ab。因此,集合不執行(xíng)該__cmp__()方法。

由于集合隻定義了(le)部分排序(子集關系),所以該list.sort()方法的輸出對于集合列表是未定義的。

設置元素,如(rú)字典鍵,必須是可(kě)散列的。

混合set實例的二進制操作(zuò)frozenset返回第一(yī)個操作(zuò)數(shù)的類型。例如(rú):frozenset('ab') | set('bc')返回一(yī)個實例frozenset。

下(xià)表列出了(le)set不适用于以下(xià)不可(kě)變實例的可(kě)用操作(zuò)frozenset:

update(*others)set |= other | ...

更新集合,添加所有其他(tā)元素。

在版本2.6中更改:接受多個輸入叠代。

intersection_update(*others)set &= other & ...

更新集合,隻保留其中的元素和(hé)其他(tā)所有元素。

在版本2.6中更改:接受多個輸入叠代。

difference_update(*others)set -= other | ...

更新設置,删除其他(tā)設備中的元素。

在版本2.6中更改:接受多個輸入叠代。

symmetric_difference_update(other)set ^= other

更新集合,隻保留任一(yī)集合中的元素,但(dàn)不能(néng)同時(shí)存在于兩者中。

add(elem)

将元素elem添加到集合中。

remove(elem)

從(cóng)集合中删除元素elem。KeyError如(rú)果元素不包含在集合中則引發。

discard(elem)

如(rú)果它存在,則從(cóng)集合中移除元素elem。

pop()

删除并返回該集合中的任意元素。KeyError如(rú)果該集合為(wèi)空,則引發。

clear()

删除集合中的所有元素。

需要(yào)注意的的非運營商的版本update(),intersection_update(),difference_update(),和(hé)symmetric_difference_update()方法會接受任何叠代器作(zuò)為(wèi)參數(shù)。

請(qǐng)注意,該ELEM參數(shù)的__contains__(),remove()和(hé)discard()方法可(kě)能(néng)是一(yī)組。為(wèi)了(le)支持搜索等效的凍結集,elem集在搜索過程中暫時(shí)發生變化,然後進行(xíng)恢複。在搜索期間(jiān),elem集不應該被讀或者變異,因為(wèi)它沒有一(yī)個有意義的值。

網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發