python中的set方法_Python中set与frozenset方法和区别详解

set(可变集合)与frozenset(不可变集合)的区别:

set无序排序且不重复,是可变的,有add(),remove()等方法。既然是可变的,所以它不存在哈希值。基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算.

sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, 或其它类序列的操作。

frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。

一、集合的创建

set()和 frozenset()工厂函数分别用来生成可变和不可变的集合。如果不提供任何参数,默认会生成空集合。如果提供一个参数,则该参数必须是可迭代的,即,一个序列,或迭代器,或支持

迭代的一个对象,例如:一个列表或一个字典。

>>> s=set('cheeseshop') 使用工厂方法创建

>>> s

{'h', 'c', 'o', 's', 'e', 'p'}

>>> type(s)

>>> s={'chessseshop','bookshop'}直接创建,类似于list的[]和dict的{},不同于dict的是其中的值,set会将其中的元素转换为元组

>>> s

{'bookshop', 'chessseshop'}

>>> type(s)

不可变集合创建:

>>> t=frozenset('bookshop')

>>> t

frozenset({'h', 'o', 's', 'b', 'p', 'k'})

二、更新可变集合

用各种集合内建的方法和操作符添加和删除集合的成员:

>>> s.add('z') #添加

>>> s

set(['c', 'e', 'h', 'o', 'p', 's', 'z'])

>>> s.update('pypi') #添加

>>> s

set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z'])

>>> s.remove('z') #删除

>>> s

set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])

>>> s -= set('pypi')#删除

>>> s

set(['c', 'e', 'h', 'o', 's'])

>>> del s #删除集合

只有可变集合能被修改。试图修改不可变集合会引发异常。

>>> t.add('z')

Traceback (most recent call last):

File "", line , in ?

AttributeError: 'frozenset' object has no attribute 'add'

三、成员关系 (in, not in)

>>> 'k' in s

False

>>> 'k' in t

True

>>> 'c' not in t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值