首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

[Python入门及进阶札记]Python-基础-集合小结

2013-03-13 
[Python入门及进阶笔记]Python-基础-集合小结集合简介python的set和其他语言类, 是一个无序不重复元素集,

[Python入门及进阶笔记]Python-基础-集合小结
集合简介

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素.

sets 支持 x in set, len(set), 和 for x in set。

集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

作为一个无序的集合,sets 不记录元素位置或者插入点。因此,sets 不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

set为可变集合

frozenset为固定集合

可变集合特有的方法: add, remove, discard, pop, clear, 这些接受对象的方法, 参数必须是可哈希的

声明

用集合的工厂方法 set()和 frozenset():

set

>>> s = set('cheeseshop')  >>> s  set(['c', 'e', 'h', 'o', 'p', 's']) 

frozenset

>>> b = frozenset([1,2,3,2])>>> bfrozenset([1, 2, 3])>>> b.add(4)Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'frozenset' object has no attribute 'add'

Set 和 ImmutableSet

字符串->字符集

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

列表/元组->集合

>>> set([1,2,3,2,1])set([1, 2, 3])>>> set((1,2,3,2,1))set([1, 2, 3])

甚至是 字典->集合

>>> a = {'name':'tom','age':22,'score':22}>>> set(a)set(['age', 'score', 'name'])
常用操作成员关系
>>> h = set('hello')>>> hset(['h', 'e', 'l', 'o'])>>> 'l' in hTrue>>> 'l' not in hFalse
新增删除

新增单个元素s.add(x)

向 set “s”中增加元素 x

>>> a = set([1,2,3,4,2])>>> aset([1, 2, 3, 4])>>> a.add(2)>>> aset([1, 2, 3, 4])>>> a.add(5)>>> aset([1, 2, 3, 4, 5])

新增多个元素

s.update(t)

s |= t

>>> a = set([1,2,3])>>> b = set([2,3,4])>>> a.update(b)>>> aset([1, 2, 3, 4])>>> bset([2, 3, 4])

删除

s.remove(x)

从 set “s”中删除元素 x, 如果不存在则引发 KeyError

>>> aset([1, 2, 3, 4, 5])>>> a.remove(4)>>> aset([1, 2, 3, 5])>>> a.remove(4)Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: 4

s.discard(x)

如果在 set “s”中存在元素 x, 则删除

>>> aset([1, 2, 3, 5])>>> a.discard(3)>>> aset([1, 2, 5])>>> a.discard(3)>>> aset([1, 2, 5])

s.pop()

删除并且返回 set “s”中的一个不确定的元素, 如果为空则引发 KeyError

>>> aset([1, 5])>>> a.pop()1>>> a.pop()5>>> a.pop()Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: 'pop from an empty set'

s.clear()

删除 set “s”中的所有元素

>>> aset([1, 2, 3, 4])>>> a.clear()>>> aset([])>>> b = set([1,2,3])>>> del b
集合间操作

注意,集合操作可以通过函数进行,也存在等价的运算符

1.交集

s.union(t) 等价 s | t

返回一个新的 set 包含 s 和 t 中的每一个元素

2.并集

s.intersection(t) 等价 s & t

返回一个新的 set 包含 s 和 t 中的公共元素

3.差集

s.difference(t) 等价 s - t

返回一个新的 set 包含 s 中有但是 t 中没有的元素

4.差分集

s.symmetric_difference(t) 等价 s ^ t

返回一个新的 set 包含 s 和 t 中不重复的元素

>>> a = set([1,2,3])>>> b = set([2,3,4])>>> a.symmetric_difference(b)set([1, 4])

5.关系判断

s.issubset(t) 等价 s <= t

测试是否 s 中的每一个元素都在 t 中

s.issuperset(t) 等价 s >= t

测试是否 t 中的每一个元素都在 s 中

6.浅拷贝

>>> aset([1, 2, 3])>>> b = a.copy()>>> bset([1, 2, 3])
其他

1.用的较少的函数

s.intersection_update(t) 等价 s &= t

返回只保留含有 set “t”中元素的 set “s”

s.difference_update(t) 等价 s -= t

返回删除了 set “t”中含有的元素后的 set “s”

s.symmetric_difference_update(t) 等价 s ^= t

返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”

The end!

To be continue

wklken

Email: wklken@yeah.net

Blog: http://blog.csdn.net/wklken

2013-03-10

转载请注明出处,谢谢

热点排行