7. Set Types — set, frozenset
一个set对象是不同的无序集合可哈希对象。常见用途包括成员资格测试,删除序列中的重复项,以及计算数学运算,如交集,联合,差异和对称差异。(对于其它容器看到内置在dict(),list()和tuple()函数和collections模块)。
2.4版本中的新功能。
像其他收藏品,集支持x in set,len(set)和for x in set。作为无序集合,集合不会记录元素位置或插入顺序。因此,集合不支持索引,切片或其他类序列行为。
目前有两个内置集类型,set和frozenset。该set类型是可变的 - 可以使用类似add()和的方法更改内容remove()。由于它是可变的,因此它没有散列值,不能用作字典键或另一个集的元素。该frozenset类型是不可变的且可拆分的 - 其内容在创建后不能更改; 因此它可以用作字典键或另一组元素。
从Python 2.7开始,可以通过在花括号中放置以逗号分隔的元素列表来创建非空集(非frozensets),例如:{'jack', 'sjoerd'}除set构造函数之外。
这两个类的构造函数都是一样的:
class set([iterable])class frozenset([iterable])
返回其元素从迭代中获取的新集或冻结集对象。一组元素必须是可散列的。为了表示集合集合,内部集合必须是frozenset对象。如果未指定iterable,则返回一个新的空集。
实例set并frozenset提供以下操作:
len(s)
返回集合的元素数小号(基数小号)。
x in s
测试x在s中的成员身份。
x not in s
Test x for non-membership in s.
isdisjoint(other)
True如果集合没有与其他元素相同的元素,则返回。当且仅当它们的交集是空集时,集合才是不相交的。
2.6版本中的新功能。
issubset(other)set <= other
测试集合中的每个元素是否在其他元素中。
set < other
测试该集合是否是其他集合的正确子集,也就是说set <= other and set != other。
issuperset(other)set >= other
测试其他元素中的每个元素是否在集合中。
set > other
测试集合是否是其他集合的正确集合,也就是说set >= other and set != other。
union(*others)set | other | ...
用集合中的元素和所有其他元素返回一个新集合。
在版本2.6中更改:接受多个输入迭代。
intersection(*others)set & other & ...
返回一个新集合,其中包含该集合和其他所有元素共有的元素。
在版本2.6中更改:接受多个输入迭代。
difference(*others)set - other - ...
返回集合中不包含其他元素的新集合。
在版本2.6中更改:接受多个输入迭代。
symmetric_difference(other)set ^ other
用集合中的元素或其他元素返回一个新集合,但不能同时返回两个元素。
copy()
用s的浅拷贝返回一个新的集合。
注意,对非运营商的版本union(),intersection(),difference(),和symmetric_difference(),issubset()和issuperset()方法将接受任何可迭代作为参数。相反,他们的基于操作员的对应方要求他们的参数是集合。这排除了易于出错的结构,例如set('abc') & 'cbs'有利于更具可读性的结构set('abc').intersection('cbs')。
双方set并frozenset支持设置来设置比较。当且仅当每个集合中的每个元素都包含在另一个中(每个元素是另一个的子集)时,两个集合是相等的。当且仅当第一组是第二组的合适子集(是子集,但不相等)时,集合小于另一集合。当且仅当第一个集合是第二个集合的适当超集(是超集,但不相等)时,集合比另一集合大。
的实例set进行比较的情况下,frozenset根据自己的成员。例如,set('abc') == frozenset('abc')返回True等等set('abc') in set([frozenset('abc')])。
子集和等式比较不推广到总排序函数。例如,任何两个非空不相交的集合不相等,并且不彼此的子集,所以所有的以下返回False:ab。因此,集合不执行该__cmp__()方法。
由于集合只定义了部分排序(子集关系),所以该list.sort()方法的输出对于集合列表是未定义的。
设置元素,如字典键,必须是可散列的。
混合set实例的二进制操作frozenset返回第一个操作数的类型。例如:frozenset('ab') | set('bc')返回一个实例frozenset。
下表列出了set不适用于以下不可变实例的可用操作frozenset:
update(*others)set |= other | ...
更新集合,添加所有其他元素。
在版本2.6中更改:接受多个输入迭代。
intersection_update(*others)set &= other & ...
更新集合,只保留其中的元素和其他所有元素。
在版本2.6中更改:接受多个输入迭代。
difference_update(*others)set -= other | ...
更新设置,删除其他设备中的元素。
在版本2.6中更改:接受多个输入迭代。
symmetric_difference_update(other)set ^= other
更新集合,只保留任一集合中的元素,但不能同时存在于两者中。
add(elem)
将元素elem添加到集合中。
remove(elem)
从集合中删除元素elem。KeyError如果元素不包含在集合中则引发。
discard(elem)
如果它存在,则从集合中移除元素elem。
pop()
删除并返回该集合中的任意元素。KeyError如果该集合为空,则引发。
clear()
删除集合中的所有元素。
需要注意的的非运营商的版本update(),intersection_update(),difference_update(),和symmetric_difference_update()方法会接受任何迭代器作为参数。
请注意,该ELEM参数的__contains__(),remove()和discard()方法可能是一组。为了支持搜索等效的冻结集,elem集在搜索过程中暂时发生变化,然后进行恢复。在搜索期间,elem集不应该被读或者变异,因为它没有一个有意义的值。
网站建设开发|APP设计开发|小程序建设开发