欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Python容器set frozenset

shiping1 的头像
set和frozenset皆为无序唯一值序列。set和frozenset最本质的区别是前者是可变的、后者是不可变的 。当集合对象会被改变时(例如添加、删除元素等),只能使用set ,一般来说使用fronzet的地方都可以使用set 。
frozenset的创建方法为:

frozenset([iterable])
例如:
>>> a = frozenset([3,4,5])>>> afrozenset([3, 4, 5])>>> 3 in aTrue>>> 6 in aFalse
>>> a = frozenset((1,'2',7))
>>> a
frozenset([1, '2', 7])

因为frozenset的不变性,其可以作为dictionary的键值及其他set的元素。其运行效率也高于set。

来自 http://f.dataguru.cn/thread-41576-1-1.html

 

Python中的集合:set与frozenset用法举例

分类: Python 4251人阅读 评论(0) 收藏 举报

【1】创建:

从list或tuple中创建,我就会这两种。不能从数字直接创建:a=set(1)错误!

1.sa=set(列表)

2.sa=set(tuple)

代码:

 

【2】交集

sc = sa & sb

sc=sa.intersection(sb)

sc=sb.intersection(sa)

三种是等价的

将交集赋值给当前集合:

sa=sa & sb                                --- 不推荐

sa.intersection_update(sb)    --貌似是原位操作,消耗少。推荐

【3】并集

sc=sa|sb

sc=sa.union(sb)

sc=sb.union(sa)

将并集赋值给当前集合: sa.update(sb)

【4】集合之差

属于集合A但不属于集合B

cs=sa-sb

sc=sa.difference(sb)

将集合之差赋值给原集合:

sa=sa-sb

sa.difference_update(sb)

【6】集合之差的并集。

sc= sa ^ sb    相当于 (sa-sb)|(sb-sa)

sc=sa.symmetric_difference(sb)

sc=sb.symmetric_difference(sa)

赋值给原集合:

sa.symmetric_difference_update(sb)

 

【7】

更改元素:

a.add(XXX)

a.pop()   --随机删除

a.remove(XX)   删除XX,XX必须存在,否则出错

a.discard(XX)   删除XX,XX若不存在,则do nothing

a.clear()    --情空

 

【8】

判断

sa.issuperset(sb)      若sa包含sb,返回True             相当于  sa>=sb   (sa>sb 真包含) 

sa.issubset(sb)       若sa包含于sb,返回True           相当于  sa<=sb  

sa.isdisjoint(sb)    若  sb&sa  ==  set([]),(如果交集为空 即无相交集 )返回True

【9】frozenset:元素一经创建,不可增加、删除和修改。因此没有add、pop、discard、remove和所有以_update结尾的方法。但可以作为左值接受赋值。

frozenset和set混合运算时,返回的值以左边的操作变量为准。

frozenset(a) | set(b)   的返回值就是frozenset,

set(a) | frozenset(b)  的返回值就是set

来自 http://blog.csdn.net/fall221/article/details/8478574


python 集合(set)

(2013-09-12 23:01:03)
 分类: Python

集合:集合是具有某种特定性质的事物的总体;

引入时间:python 2.3 以后版本, 位于Stes模块;

set(tuple)                #创建序列

集合的特点:交集和并集

a=set(range(10))
b=set(range(20))
c=a|b
print c
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

d=a&b
print d
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

函数:

1.issubset              #判断是否是其子集

a.issubset(b)          返回bool值

2.add                   #集合中增加元素

a=set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a.add(11)
print a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11])

3.clear                  #删除集合中所有元素

4.copy                   #复制集合中的元素

5.difference             #判断集合之间的差异返回新的集合

a=set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b=set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

b.difference(a)           #判断b与a之间的差异
set([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

6.remove                  #删除序列中指定的元素

7.isdisjoint              #判断是否是无相交集,如果 无相交集 返回 True 否则返回False

8.issuperset              #判断是否是超级,返回bool值

b.issuperset(a)           #判断b是否是a的超集

超集定义:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集。 S1是S2的超集,则S2是S1的真子集,反之亦然

9.union                   #连接两个集合,形成新的集合

a.union(d)

10.update                 #更新集合

a.update(b)               #将b集合更新到a集合中

11.pop                    #删除集合中的任意一个元素

a.pop()  

12.discard                #删除集合中存在的指定元素

a.discard(2)              #元素2如果存在集合a中,则删除;

 

红色代表示例代码

 来自 http://blog.sina.com.cn/s/blog_b5fe6b270101eqv6.html

普通分类: