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)發