一、集合(set)
集合是一些唯一的、不可变的对象的一个无序集合体。集合既不是序列也不是映射类型。
创建集合: 字面量的方式
{1,2,3,4}
创建集合: 工厂函数的方式
set([1,2,3,4])
二、集合的方法
集合的add方法插入一个项目,update在原位置求并集,remove根据值删除一个元素。
>>> x = set('abcde')
>>> y = set('bdxyz')
>>> z = x.intersection(y) #求交集
>>> z
{'d', 'b'}
----------------------------------
>>> z.add('spam') #添加元素
>>> z
{'d', 'b', 'spam'}
----------------------------------
>>> z.update(set([1,2])) #求并集
>>> z
{1, 2, 'd', 'b', 'spam'}
----------------------------------
>>> z
{1, 2, 'd', 'b', 'spam'}
>>> z.remove('b') #移除元素
>>> z
{1, 2, 'd', 'spam'}
三、集合推导
集合推导会运行一个循环并在每次迭代时收集一个表达式的结果,通过一个循环变量来访问当前的迭代值以用于集合表达式中。
>>> {x**2 for x in [1,2,3,4]}
{16, 1, 4, 9}
四、不可变性的限制
集合只能包含不可变对象类型。因此,列表和字典不能嵌入到集合中,元组是可以嵌入集合。集合本身是可变的,因此不能直接嵌入到其他集合中。
>>> S={1,2}
>>> S.add([3,4])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
-------------------------------------
>>> S.add({'classname':'python'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
-------------------------------------
>>> S.add((3,))
>>> S
{1, 2, (3,)}
如果需要在另外一个集合中存储一个集合,可以像调用set一样调用内置函数frozenset,但frozenset会创建一个不可变集合,可以嵌套到其他集合中。
>>> a = {1,2,3}
>>> b = frozenset([4,5,6])
>>> a.add(b)
>>> a
{1, 2, 3, frozenset({4, 5, 6})}
网友评论