Python核心数据类型——集合(Set)

集合是一些唯一的,不可变的对象的一个无序集合,这些对象支持与数学几何理论相对应的操作。
根据定义,一个项在集合中只能出现一次,不管将它添加了多少次。同样,集合有着广泛的应用,尤其是在涉及数字和数据库的工作中。

我们可以看到,一个集合的行为很像一个无值的字典的键,但是,它还支持额外的操作。

然而,由于集合是无序的,并且不会把键匹配到值,它们既不是序列也不是映射类型,它们是自成一体的类型。

========================================================================================

要创建一个集合对象,向内置的set函数传递一个序列或其他可迭代的对象:

>>> x = set('abcde')
>>> y = set('bdxyz')
得到了一个集合对象,其中包含传递的对象的所有元素(注意,集合并不包含位置顺序,序列却包含):

>>> x
{'b', 'c', 'd', 'a', 'e'}
>>> y
{'b', 'd', 'x', 'y', 'z'}
集合通过表达式操作符支持一般的数学几何运算。注意,不能再一般序列上应用这些表达式,必须通过序列创建集合后才能使用这些工具。

>>> 'e' in x
True
>>> x - y
{'c', 'a', 'e'}
>>> x | y
{'a', 'b', 'd', 'e', 'x', 'y', 'c', 'z'}
>>> x&y
{'b', 'd'}
>>> x^y   #集合对称差:x和y的并集减去交集
{'a', 'e', 'x', 'y', 'c', 'z'}
>>> x>y   # y是否是x的子集
False
>>> x>> x == y
False
除了表达式,集合对象还提供了对应这些操作的方法:add方法插入,update是按位置求并集,remove根据值删除一个项目

>>> z = x&y
>>> z
{'b', 'd'}
>>> z.add('SPAM')
>>> z
{'b', 'SPAM', 'd'}
>>> z.update(set(['X','Y']))
>>> z
{'b', 'SPAM', 'X', 'd', 'Y'}
>>> z.remove('b')
>>> z
{'SPAM', 'X', 'd', 'Y'}
作为可迭代的容器,集合也可以用于len、for循环和列表解析这样的操作中。然而,由于它们都是无序的,所以不支持像索引和分片这样的操作:

>>> for item in set('abc'):
	print(item*3)

	
bbb
ccc
aaa
尽管前面介绍的集合表达式通常需要两个集合,它们基于方法的对应形式往往对任何可迭代类型也有效:

>>> S = set([1,2,3])
>>> S
{1, 2, 3}
>>> S |set([3,4])
{1, 2, 3, 4}

>>> S |([1,4])
Traceback (most recent call last):
  File "", line 1, in 
    S |([1,4])
TypeError: unsupported operand type(s) for |: 'set' and 'list'
>>> S.union(([1,5]))
{1, 2, 3, 5}
>>> S.issubset(range(-5,5))
True
注意:在python中,{}仍然是一个字典。空的集合必须通过内置函数set来创建,并且以同样方式显示:
>>> S-{1,2,3}
set()
>>> type({})
列表和字典不能嵌入到集合中,但是,如果你需要存储复合值的话,元组是可以嵌入的。

========================================================================================

集合解析

>>> {c*4 for c in 'spams'}
{'pppp', 'aaaa', 'mmmm', 'ssss'}
>>> {x**2 for x in [1,2,3,4]}
{16, 1, 9, 4}
===================================================== ===================================

为什么使用集合:

集合的用途:例如,由于项在集合中只能存储一次,集合(set)可以用来把重复项从其他集合(collection)中过滤掉。直接把集合(collection)转换为一个集合(set),然后
再转换回来即可:

>>> L = [1,2,1,3,2,4,5]
>>> set(L)
{1, 2, 3, 4, 5}
>>> L = list(set(L))
>>> L
[1, 2, 3, 4, 5]
  当你遍历图形或其他回环结构的时候,集合可以用来记录已经访问过的位置,必须确保访问过的项不再循环。尽管把访问状态作为键记录到字典中很高效,但集合提供了几乎等同的一种替代方式。

其次,在处理较大的数据集合的时候(例如:数据库查询结果),两个集合的交集包含了两个领域中的共有的对象,并集包含了两个集合的所有项目。

你可能感兴趣的:(☛Language,------,Python3,Python3,Python,集合)