设为首页 加入收藏

TOP

python中set和frozenset方法和区别(一)
2017-09-30 14:44:33 】 浏览:3161
Tags: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()工厂函数分别用来生成可变和不可变的集合。如果不提供任何参数,默认
会生成空集合。如果提供一个参数,则该参数必须是可迭代的,即,一个序列,或迭代器,或支持
迭代的一个对象,例如:一个列表或一个字典。

 1 >>> s=set('cheeseshop') 使用工厂方法创建  2 >>> s  3 {'h', 'c', 'o', 's', 'e', 'p'}  4 >>> type(s)  5 <type 'set'>
 6 
 7 >>> s={'chessseshop','bookshop'}直接创建,类似于list的[]和dict的{},不同于dict的是其中的值,set会将其中的元素转换为元组  8 >>> s  9 {'bookshop', 'chessseshop'} 10 >>> type(s) 11 <type 'set'>
12 
13 不可变集合创建: 14 >>> t=frozenset('bookshop') 15 >>> t 16 frozenset({'h', 'o', 's', 'b', 'p', 'k'})

二、更新可变集合

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

 1 >>> s.add('z')  #添加
 2 >>> s
 3 set(['c', 'e', 'h', 'o', 'p', 's', 'z'])
 4 >>> s.update('pypi') #添加
 5 >>> s
 6 set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z'])
 7 >>> s.remove('z') #删除
 8 >>> s
 9 set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])
10 >>> s -= set('pypi')#删除
11 >>> s
12 set(['c', 'e', 'h', 'o', 's'])
13 >>> del s  #删除集合

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

1 >>> t.add('z') 2 Traceback (most recent call last): 3 File "<stdin>", line 1, in ? 4 AttributeError: 'frozenset' object has no attribute 'add'

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

1 >>> 'k' in s
2 False
3 >>> 'k' in t
4 True
5 >>> 'c' not in t
6 True

四、集合等价/不等价

1 >>> s == t
2 False
3 >>> s != t
4 True
5 >>> u = frozenset(s)
6 >>> s == u
7 True
8 >>> set('posh') == set('shop')
9 True

五、子集/超集

1 >>> set('shop') < set('cheeseshop')
2 True
3 >>> set('bookshop') >= set('shop')
4 True

六、遍历访问集合中的值(可变集合和非可变都支持)

 1 >>> s=set('cheeseshop')
 2 >>> s
 3 {'h', 'c', 'o', 's', 'e', 'p'}
 4 >>> for i in s:
 5     print(i)    
 6 h
 7 c
 8 o
 9 s
10 e
11 p
12 
13 
14 >>> t=frozenset('bookshop')
15 >>> t
16 frozenset({'h', 'o', 's', 'b', 'p', 'k'})
17 >>> for i in t:
18     print(i)    
19 h
20 o
21 s
22 b
23 p
24 k

七、集合类型操作符(所有的集合类型)

1.联合( | )

1 两个集合的联合是一个新集合,该集合中的每个元素都至少是其中一个集合的成员,即,属于两个集合其中之一的成员。联合符号有一个等价的方法,union(). 2 >>> s | t
3 set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

2.交集( & )

1 你可以把交集操作比做集合的 AND(或合取)操作。两个集合的交集是一个新集合,该集合中的每 2 个元素同时是两个集合中的成员,即,属于两个集合的成员。交集符号有一个等价的方法,intersection() 3 >>> s & t
4 set(['h', 's', 'o', 'p']

3.差补/相对补集( – )

1 两个集合(s 和 t)的差补或相对补集是指一个集合 C,该集合中的元素,只属于集合 s,而不属 2 于集合 t。差符号有一个等价的方法,difference(). 3 >>> s - t
4 set(['c', 'e'])

4.对称差分( ^ )

1 和其他的布尔集合操作相似, 对称差分是集合的 XOR(又称"异或 "). 2 两个集合(s 和 t)的对称差分是指另外一个集合 C,该集合中的元素,只能是属于集合 s 或者集合 t 3 的成员,不能同时属于两个集合。对称差分有一个等价的方法,symmetric_difference(). 4 >>> s ^ t
5 set(['k', 'b', 'e', 'c'])

5.混合集合类型操作

1 上面的示例中,左边的 s 是可变集合,而右边的 t 是一个不可变集合. 注意上面使用集合操作 2 运算符所产生的仍然是可变集合,但是如果左右操作数的顺序反过来,结果就不一样了: 3 >>> t | s
4 frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])
5 >>&
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python全栈开发之7、模块和几种常.. 下一篇Visual Studio运行Python报No mod..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目