python集合
集合
1. 创建集合
用集合的工厂方法 set()和 frozenset()。这也是集合被创建的唯一方法
>>> s = set('cheeseshop')
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])
>>> t = frozenset('bookshop')
>>> t
frozenset(['b', 'h', 'k', 'o', 'p', 's'])
>>> type(s)
<type 'set'>
>>> type(t)
<type 'frozenset'>
>>> len(s)
6
>>> len(s) == len(t)
True
>>> s == t
False
2. 访问集合中的值
你可以遍历查看集合成员或检查某项元素是否是一个集合中的成员
>>> 'k' in s
False
>>> 'k' in t
True
>>> 'c' not in t
True
>>> for i in s:
print i
c
e
h
o
p
s
3. 更新集合
用各种集合内建的方法和操作符添加和删除集合的成员:
>>> 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'])
我们之前提到过,只有可变集合能被修改。试图修改不可变集合会引发异常。
>>> t.add('z')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'frozenset' object has no attribute 'add'
4. 删除集合中的成员和集合
如果如何删除集合本身,可以像删除任何 Python 对象一样,
令集合超出它的作用范围, 或调用 del 将他们直接清除出当前的名字空间。 如果它的引用计数为零,
也会被标记以便被垃圾回收。
>>> del s
>>>
5.集合类型操作符
- 标准类型操作符(所有的集合类型)
| 符号 | 说明 | 备注 |
|---|---|---|
| in | 成员关系(在) | |
| not in | 成员关系(不在) | |
| == | 集合等价 | |
| != | 集合不等价 | |
| <,<= | 子集 | |
| >, >= | 超集 | 等于号允许非严格定义的子集和超集 |
| | | 联合 | 与OR是等价的,两个集合的联合是一个新集合,该集合中的每个元素都至少是其中一个集合的成员。联合符号有一个等价的方法union(). |
| & | 交集 | 操作比做集合的AND(或合取)操作。两个集合的交集是一个新集合,该集合中的每个元素同时是两个集合中的成员有一个等价的方法,intersection(). |
| - | 差补/相对补集 | 两个集合(s 和 t)的差补该集合中的元素,只属于集合 s,而不属于集合 t。差符号有一个等价的方法,difference(). |
| ^ | 对称差分 | 两个集合(s 和 t)的对称差分只能是属于集合 s 或者集合 t的成员,不能同时属于两个集合。对称差分有一个等价的方法,symmetric_difference(). |
如果左右两个操作数的类型相同, 既都是可变集合或不可变集合, 则所产生的结果类型是相同的,
但如果左右两个操作数的类型不相同(左操作数是 set,右操作数是 frozenset,或相反情况),
则所产生的结果类型与左操作数的类型相同,上例中可以证明这一点。
还要注意,加号不是集合类型的运算符
6.可变集合类型操作符
| 符号 | 说明 | 示例 |
|---|---|---|
| (Union) Update ( |= ) | 这个更新方法从已存在的集合中添加(可能多个)成员,此方法和update()等价. | 说明 I |
| &= | 保留(或交集更新)操作,保留与其他集合的共有成员。此方法和intersection_update()等价. | 说明 II |
| –= | 对集合 s 和 t 进行差更新操作s-=t,差更新操作会返回一个集合,该集合中的成员是集合 s 去除掉集合 t 中元素后剩余的元素。此方法和 difference_update()等价. | 说明 III |
| ^= | 对集合 s 和 t 进行对称差分更新操作(s^=t),对称差分更新操作会返回一个集合,该集合中的成员仅是原集合 s 或仅是另一集合 t 中的成员。此方法和 symmetric_difference_update()等价. | 说明 IV |
说明 I
>>> s = set('cheeseshop')
>>> u = frozenset(s)
>>> s |= set('pypi')
>>> s
set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])
说明 II
>>> s = set(u)
>>> s &= set('shop')
>>> s
set(['h', 's', 'o', 'p'])
说明 III
>>> s = set(u)
>>> s -= set('shop')
>>> s
set(['c', 'e'])
说明 IV
>>> s = set(u)
>>> t = frozenset('bookshop')
>>> s ^= t
>>> s
set(['c', 'b', 'e', 'k'])
7. 内建函数
- 标准类型函数
len()
把集合作为参数传递给内建函数 len(),返回集合的基数(或元素的个数)。
>>> s = set(u)
>>> s
set(['p', 'c', 'e', 'h', 's', 'o'])
>>> len(s)
6
- 工厂函数
set() AND frozenset()
set()和 frozenset()工厂函数分别用来生成可变和不可变的集合。如果不提供任何参数,默认
会生成空集合。如果提供一个参数,则该参数必须是可迭代的,即,一个序列,或迭代器,或支持迭代的一个对象,例如:一个文件或一个字典。
>>> set()
set([])
>>> set([])
set([])
>>> set(())
set([])
>>> set('shop')
set(['h', 's', 'o', 'p'])
>>>
>>> frozenset(['foo', 'bar'])
frozenset(['foo', 'bar'])
>>>
>>> f = open('numbers', 'w')
>>> for i in range(5):
... f.write('%d\n' % i)
...
>>> f.close()
>>> f = open('numbers', 'r')
>>> set(f)
set(['0\n', '3\n', '1\n', '4\n', '2\n'])
>>> f.close()
8. 内建方法
- 所有的集合方法
| 方法名称 | 操作 |
|---|---|
| s.issubset(t) | 如果 s 是 t 的子集,则返回 True,否则返回 False |
| s.issuperset(t) | 如果 t 是 s 的超集,则返回 True,否则返回 False |
| s.union(t) | 返回一个新集合,该集合是 s 和 t 的并集 |
| s.intersection(t) | 返回一个新集合,该集合是 s 和 t 的交集 |
| s.difference(t) | 返回一个新集合,该集合是 s 的成员,但不是 t 的成员 |
| s.symmetric_difference(t) | 返回一个新集合,该集合是 s 或t的成员,但不是 s 和 t 共有的成员 |
| s.copy() | 返回一个新集合,它是集合 s 的浅复制 |
- 适用于可变集合方法
新的方法有 add(), remove(), discard(), pop(), clear(). 这些接受对象的方法,参数必须是可哈希的。
| 方法名 | 操作 |
|---|---|
| s.update(t) | 用 t 中的元素修改 s, 即,s 现在包含 s 或 t 的成员 |
| s.intersection_update(t) | s 中的成员是共同属于 s 和 t 的元素。 |
| s.difference_update(t) | s 中的成员是属于 s 但不包含在 t 中的元素 |
| s.symmetric_difference_update(t) | s 中的成员更新为那些包含在 s 或 t 中,但不 是 s和 t 共有的元素 |
| s.add(obj) | 在集合 s 中添加对象 obj |
| s.remove(obj) | 从集合 s 中删除对象 obj ;如果 obj 不是集合 s 中 的元素 (obj not in s),将引发 KeyError 错误 |
| s.discard(obj) | 如果 obj 是集合 s 中的元素,从集合 s 中删除对象 obj |
| s.pop() | 删除集合 s 中的任意一个对象,并返回它 |
| s.clear() | 删除集合 s 中的所有元素 |
------------------------------------------------
自信来源于充分的准备和对规则的理解
1、不要总问别人为什么,要问自己凭什么
2、做任何事的时候要仔细,给别人意见的时候能让别人一目了然,可以快速的给出意见及结果。

浙公网安备 33010602011771号