您的位置:首页 > 编程语言 > Python开发

Python学习笔记之集合类型(set, frozeset)

2012-08-31 15:46 831 查看
集合对象是一组无序排列的可哈希的值,集合成员可以做字典的键。
集合有两种类型,可变集合(set)和不可变集合(frozenset)

创建集合类型
工厂方法 set(), frozenset()
>>> s = set('hello')
>>> s

set(['h', 'e', 'l', 'o'])

>>> t = frozenset(['12345678', 100])
>>> t

frozenset(['12345678', 100])

集合类型操作符

成员关系(in, not in)

判定耨个元素是否是一个集合中的成员。(*不使用与集合的子集和超集,使用<,>)

集合等价/不等价(==, !=)

当且仅当其中两个集合的成员相同,被用于相同或不同的集合之间做比较。

子集/超集(<, <=, >, >=)

检查集合是否是其他集合的超集或子集
>>> set('abcd') < frozenset('abcde123')
True

"<, >"等是判断集合的超集和子集,而不是通常的大于和小于,所以以下都为False

>>> set('abcd') < set('abce123')

False
>>> set('abcd') > set('abce123')

False

联合(|),等价方法union()
交集(&),等价方法intersection()
差补/相对集合(-),等价方法difference()
对称查分(^),等价方法symmetric_difference(),只不能同时属于两个集合的元素
混合集合类型,集合操作结果的类型同左边的集合类型

>>> s = set('abcd')
>>> f = frozenset('1234')

>>> s |f

set(['a', 'c', 'b', 'd', '1', '3', '2', '4']) #结果和s的类型相同,即Set

>>> f|s

frozenset(['a', 'c', 'b', 'd', '1', '3', '2', '4']) #结果和f的类型相同,即frozenset

只用于可变集合(set)的操作符

(Union) Update ( |= ), 等同于update()
保留/交集更新( &= ),等同于intersection_update()
差更新( -= ),等同于difference_update()
对称差分更新( ^= ),等同于symmetric_difference_update()

标准函数

len()
set(), frozenset()

集合的内建方法(set,frozenset)

issubset(t),是否是给定集合t的子集
issuperset(t),是否是给定集合t的超集
union(t)
intersection(t)
difference(t)
symmetric_difference(t)
copy(t),浅复制

只用于可变集合的方法(set)

s.update(t),将集合t添加到集合s中,即s现在包含s或t的成员
s.intersection_udpate(t),s中的成员共同属于s和t的元素
s.difference_update(t),s中的成员属于s但不包含在t中的元素
s.symmetric_differrence_update(s),s中的成员更新为包含在s或t中,但不是s和t的共有元素
s.add()
s.remove(),从集合s中删除对象obj,如obj不是集合s中的元素,引发KeyError错误
s.discard(),如obj是集合s中的元素,这从s中删除对象obj,如obj不是集合s中的元素,也不会引发错误。
s.pop(),删除集合s中的任意一个对象,并返回它
s.clear()

操作符和内建方法的比较

当用操作符时,操作符两边的操作数必须是集合
使用内建方法时,对象可以是迭代类型

>>> s = set('abcd')
>>> s2 = set('xyz')
>>> s |= s2 # s, s2都是set, "|="操作OK
>>> s
set(['a', 'c', 'b', 'd', 'y', 'x', 'z'])

>>> l = [1,2,3,4]

>>> s |= l #l为list类型, 出现异常
Traceback (most recent call last):

File "<pyshell#27>", line 1, in <module>

s |= l

TypeError: unsupported operand type(s) for |=: 'set' and 'list'

>>> s.update(l) #内建方法update, 可以使用list等迭代类型

>>> s

set([1, 2, 3, 4, 'a', 'c', 'b', 'd', 'y', 'x', 'z'])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: